【问题标题】:python and selenium code was working one hour ago but stopped working nowpython 和 selenium 代码在一小时前工作,但现在停止工作
【发布时间】:2021-07-15 18:33:39
【问题描述】:

尊敬的社区成员,

所以我在右下角的谷歌搜索中找到了下一个按钮,这是 HTML 代码:

<td aria-level="3" class="d6cvqb" role="heading"><a href="/search? q=site:linkedin.com/in/+AND+%22Kleiner+Perkins%22+AND+%22profile%22&amp;biw=801&amp;bih=661&amp;sxsrf=AL eKk015vcO0GNGs89AY8isGkfsRmY5fEw:1619014736075&amp;ei=UDSAYLCMBM- zsAfljLiQBQ&amp;start=30&amp;sa=N&amp;ved=2ahUKEwiw9Orxw4_wAhXPGewKHWUGDlI4FBDw0wN6BAgBEEk"
id="pnnext" style="text-align:left">
<span class="SJajHc NVbCr" style="background:url(/images/nav_logo299.webp) no-repeat;background- 
position:-96px 0;width:71px"></span><span style="display:block;margin-left:53px">Next</span></a></td>

我在python中使用了以下代码来定位按钮并点击它:

next_button = driver.find_element_by_xpath("//a[@id='pnnext']") 
next_button.click()

一小时前一切正常,我有点高兴,但现在找不到按钮,感谢您的时间和帮助!

编辑:我打印了 google page_source 并且我注意到我以某种方式被检测到,有没有办法解决?

【问题讨论】:

  • 查看 driver.page_source 中的内容并检查 HTML 是否仍然是您所期望的。也许 Google 搜索确定您正在进行网页抓取,并为您提供了不同的页面。
  • 被检测到如何解决?
  • 尝试添加随机睡眠 (time.sleep(...)),希望 Google 认为您是执行点击操作的人而不是机器人。 SO上有一个讨论反检测策略的线程,但我太忙了,没时间去搜索它。

标签: python html selenium button xpath


【解决方案1】:

您可能需要直到按钮可点击为止。

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver, timeout=30)
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@id='pnnext']")))
elem = driver.find_element_by_xpath("//a[@id='pnnext']")
elem.click()

选项 2

尝试使用此定位器等待:

//a[@id='pnnext' and contains(@href, '/search')]

或者,

//a[@id='pnnext' and contains(@href, '/search')]/span[1]

【讨论】:

  • 我刚刚运行了代码,但它不工作,超时
  • 我认为这不再是按钮问题,但看到 page_source 我注意到谷歌在页面中说“检测到异常流量。不知道如何解决这个新问题
  • 我认为您需要一段时间才能再次运行您的脚本。添加一些等待,这样你的浏览器行为就会像人类一样。
【解决方案2】:

我会尝试以下方法。如果您有 ID,请使用它而不是 X-path,因为它是最快的。以及隐式等待。

driver.implicitly_wait(5) 
driver.get('https://www.google.com/search?q=test')
google_next = driver.find_element(By.ID, "pnnext")
google_next.click()

【讨论】:

  • 我认为这不再是按钮问题,但看到 page_source 我注意到谷歌在页面中说“检测到异常流量。不知道如何解决这个新问题
  • 请参阅上面的链接了解如何隐藏自动化检测,这可能是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多