网络抓取谷歌搜索结果而没有被检测到

时间:2021-05-12 15:55:31

标签: python selenium web search automation

我有大约 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)

1 个答案:

答案 0 :(得分:0)

好的,所以我不知道他们是否或如何检测到您正在使用自动化。但是我知道有一个技巧你可以尝试......我不能保证它对谷歌有效。这听起来很hacky,确实如此。如果您这样做,请确保先复制您的 chromedriver:

在 chromedriver 二进制文件本身中,如果您尝试使用某种搜索工具,您会发现(如果我没记错的话)有很多包含 cdc_ 的字符串。这些字符串看起来像 $cdc_hqpiuakajldvcZf 或任何乱码。您想要做的是替换这些字符串中的所有字符,但保留字符数和下划线的位置,以及 $。例如,我可能会将上述字符串更改为 $fws_nfkdishwlkdbcof。如果字符数不正确,chromedriver 会崩溃并烧毁。

之所以可行,是因为某些检测软件会在其中包含 cdc 的变量中提供线索,以了解您正在使用浏览器驱动程序。让我知道你是否尝试过这个以及它是如何进行的。