【问题标题】:Web scrabbing google search results without getting detected网络抓取谷歌搜索结果而不被检测到
【发布时间】:2021-05-12 15:55:31
【问题描述】:

我从谷歌搜索结果中复制了大约 100000 个链接。我使用 selenium 编写了一个 python 代码来让我的生活更轻松,但是一旦我到达大约 150 个结果,谷歌搜索结果页面就会发生变化,因为我认为谷歌正在检测我的抓取工具。这是我的代码示例:

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)

【问题讨论】:

  • 是什么让您认为自己被准确检测到了?嗯......我不能肯定地说,但我相信绕过反自动化安全的东西违反了 stackoverflow TOS。
  • 我得到元素未找到下一个按钮的异常

标签: python selenium web search automation


【解决方案1】:

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

在 chromedriver 二进制文件中,如果你尝试使用一些搜索工具,如果我没记错的话,你会发现相当多的字符串包含 cdc_。这些字符串看起来像$cdc_hqpiuakajldvcZf,或者其他乱码。您要做的是替换这些字符串中的所有字符,但保留字符数和下划线的位置以及 $。例如,我可能会将上面的字符串更改为$fws_nfkdishwlkdbcof。如果您没有正确数量的字符,chromedriver 将会崩溃并烧毁。

这可以工作的原因是某些检测软件会在变量中包含cdc 的线索,以知道您正在使用浏览器驱动程序。如果您尝试此方法以及效果如何,请告诉我。

【讨论】:

  • cdc_ 是驱动程序中我需要在每个循环中重置的属性吗?
  • 否 - 它是 chromedriver 二进制文件本身的一部分。您不需要编写任何代码来执行此操作,文本编辑器就可以了。我不确定您是否知道您的 chromedriver.exe 文件在哪里,但您可以在 Google 上搜索操作系统的标准位置并进行跟踪。
  • 我正在使用 google colab,它是一种用于运行您的代码的云服务。所以我不知道我将如何访问驱动程序文件,有什么线索吗?
  • 我不知道。如果事实证明您无权访问它,您可以随时下载并使用您自己的chromium-chromedriver
  • 是的,我当然下载了它,但它在云上,就像一切一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 2020-10-09
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多