我有大约 100000 个链接可以从谷歌搜索结果中复制。我使用 selenium 编写了一个 python 代码来让我的生活更轻松,但是一旦我到达大约 150 个结果,谷歌搜索结果页面就会发生变化,因为我认为谷歌正在检测我的 scrabber。这是我的代码示例:
links = []
# Extracting the 10 links in the google page
soup = BeautifulSoup(driver.page_source, 'html.parser')
sleep(randTime(0,1))
search = soup.find_all('div', class_="yuRUbf")
for h in search:
links.append(h.a.get('href'))
sleep(randTime(0,1))
#Clicking the next button
next_button = driver.find_element_by_xpath("//a[@id='pnnext']")
sleep(randTime(0,5))
next_button.click()
sleep(randTime(2,10))
我非常感谢您的任何帮助,我在代码执行期间使用随机睡眠,但它们不起作用。您有什么建议可以提供帮助吗?
这是我得到的错误:
NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"xpath","selector":"//a[@id='pnnext']"}
(Session info: headless chrome=90.0.4430.93)
答案 0 :(得分:0)
好的,所以我不知道他们是否或如何检测到您正在使用自动化。但是我知道有一个技巧你可以尝试......我不能保证它对谷歌有效。这听起来很hacky,确实如此。如果您这样做,请确保先复制您的 chromedriver:
在 chromedriver 二进制文件本身中,如果您尝试使用某种搜索工具,您会发现(如果我没记错的话)有很多包含 cdc_
的字符串。这些字符串看起来像 $cdc_hqpiuakajldvcZf
或任何乱码。您想要做的是替换这些字符串中的所有字符,但保留字符数和下划线的位置,以及 $。例如,我可能会将上述字符串更改为 $fws_nfkdishwlkdbcof
。如果字符数不正确,chromedriver 会崩溃并烧毁。
之所以可行,是因为某些检测软件会在其中包含 cdc
的变量中提供线索,以了解您正在使用浏览器驱动程序。让我知道你是否尝试过这个以及它是如何进行的。