我正在尝试在 Google Colab 上使用 selenium 进行网页抓取,但是在复制其 xpath 后尝试查找元素(尤其是链接)时遇到了问题。
我尝试过错开等待时间,并复制完整的 XPATH 而不仅仅是 XPATH。我还尝试执行与尝试使用另一个网站抓取此链接相同的步骤,并且它有效。这让我相信我最初尝试抓取的特定网站存在问题。早些时候,我在使用 beautiful soup 时遇到了一个问题,它会说我的访问被拒绝,所以我收到错误的原因可能是因为它也以这种方式被阻止,尽管当我使用时这并不像以前那么明显美丽的汤。无论如何,我附上了整个代码的图片(除了我在下面讨论的具体代码之外),以及网站的屏幕截图,其中包含我在检查时想要抓取的内容。如果您有任何解决此问题的想法,或者我只是做错了什么,请告诉我。
这是我的代码:
driver = webdriver.Chrome(options=options)
driver.get(url)
link = driver.find_element(By.XPATH, '//*[@id="formDiv"]/div/table/tbody/tr[2]/td[3]')
这是我得到的错误:
---------------------------------------------------------------------------
NoSuchElementException Traceback (most recent call last)
<ipython-input-103-acdf74b871c1> in <cell line: 4>()
2 driver.get(url)
3
----> 4 link = driver.find_element(By.XPATH, '//*[@id="formDiv"]/div/table/tbody/tr[2]/td[3]')
2 frames
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
227 alert_text = value["alert"].get("text")
228 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here
--> 229 raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="formDiv"]/div/table/tbody/tr[2]/td[3]"}
(Session info: chrome-headless-shell=126.0.6478.63); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
Stacktrace:
#0 0x56f9edf3869a <unknown>
#1 0x56f9edc1b0dc <unknown>
#2 0x56f9edc67931 <unknown>
#3 0x56f9edc67a21 <unknown>
#4 0x56f9edcac234 <unknown>
#5 0x56f9edc8a89d <unknown>
#6 0x56f9edca95c3 <unknown>
#7 0x56f9edc8a613 <unknown>
#8 0x56f9edc5a4f7 <unknown>
#9 0x56f9edc5ae4e <unknown>
#10 0x56f9edefe86b <unknown>
#11 0x56f9edf02911 <unknown>
#12 0x56f9edeea35e <unknown>
#13 0x56f9edf03472 <unknown>
#14 0x56f9edececbf <unknown>
#15 0x56f9edf28098 <unknown>
#16 0x56f9edf28270 <unknown>
#17 0x56f9edf377cc <unknown>
#18 0x7c8a0be61ac3 <unknown>
这似乎提取了您要查找的内容:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
URL = "https://www.sec.gov/Archives/edgar/data/1346824/000110465924035606/0001104659-24-035606-index.html"
options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
driver = webdriver.Remote(
"http://127.0.0.1:4444/wd/hub",
options=options
)
driver.get(URL)
link = driver.find_element(By.XPATH, '//*[@id="formDiv"]/div/table/tbody/tr[2]/td[3]')
print(link)
print(link.text)
driver.close()
输出:
tm249128d1_sc13da.htm
我更喜欢在 Docker 容器中使用 Selenium,然后将其作为远程驱动程序进行访问。您可以将对
webdriver.Remote()
的调用替换为:
driver = webdriver.Chrome(options=options)
最后,我建议不要在启动浏览器时使用
--headless
标志。恕我直言,能够看到您正在抓取的内容确实很有帮助。