【问题标题】:Selenium "Please verify you are a human" Popup in FirefoxFirefox 中的 Selenium“请验证您是人类”弹出窗口
【发布时间】:2020-12-29 08:13:14
【问题描述】:

我很好奇是否有人找到解决方法来处理在使用 Selenium 和 BeautifulSoup 时在 FireFox 中随机弹出的“请确认您是人类”。目前,它大约每 500 或 1,000 个 URL 请求就会弹出一次,但我希望有一个自动化的解决方法。

我的驱动程序只是带有 selenium 的默认 driver = webdriver.Firefox()。弹出窗口是一个按住按钮(下图),我刚刚手动完成了它,因为我已经看到它弹出了。任何信息都会非常感谢!

【问题讨论】:

  • 复制步骤?
  • 您可以删除此仓库中的time.sleep() 并运行:github.com/aviolante/stockx_scraper/blob/master/…
  • 抱歉对复制含糊不清。如果您只是点击了足够长的 URL 列表,尤其是没有 time.sleep(),那么您将遇到此 URL 重定向。
  • 您没有为此页面添加 URL,因此我们无法对其进行测试。您是否尝试使用代理服务器并且每个页面都使用不同的代理服务器加载?

标签: python selenium selenium-webdriver beautifulsoup webdriver


【解决方案1】:

所以我想出了一个解决方法。由于出现“请验证您是人类”弹出窗口时 URL 实际上并没有更改/重定向,因此我在使用 beautifulSoup 获取元素之前添加了一个步骤。

对于列表中被抓取的每个 URL,我执行time.sleep(5.5) 以允许 URL 完全加载或发生验证弹出窗口。然后,我与 URL 交互并查找验证指示符。对于 StockX,它的工作原理是这样的:如果是这样,请尝试 soup.find('div', class_='page-title').text,如果找到 '\nPlease verify you are a human\n',则关闭浏览器并休眠(driver.quit()time.sleep(20)),否则抓取元素。

我没有编写完整的代码来工作,但我知道我可以检测到它是否是上述的验证页面。下面可能是这样的:

for url in url_list:
  for attempt in range(5):
    try:
      if soup.find('div', class_='page-title').text == '\nPlease verify you are a human\n':
        driver.quit()
        time.sleep(20)
      else:
        scrape_everything()
    except:
      print(f'Hit Verify Page Attempt Num.: {attempt}')
    else:
      break
  else:
    continue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2018-10-21
    • 2019-01-22
    • 1970-01-01
    • 2021-02-17
    • 2014-06-23
    • 2016-05-11
    相关资源
    最近更新 更多