【问题标题】:chrome --headless mode not working however normal mode is working finechrome --headless 模式不工作,但正常模式工作正常
【发布时间】:2022-01-08 06:29:06
【问题描述】:

我将以下代码用于 chrome --headless 模式,但代码执行不正确。 代码在正常模式下工作正常。

def instagram_login():
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--headless")
    driver = webdriver.Chrome("/home/chromedriver", options=chrome_options)
    driver.get('https://www.instagram.com/')
    driver.maximize_window()
    driver.implicitly_wait(20)
    form = driver.find_element_by_xpath("//*[@class='HmktE']")
    usrinput = form.find_element_by_name("username")
    usrinput.clear()
    usrinput.send_keys("xxxxxx")
    usrpwd = form.find_element_by_name("password")
    usrpwd.clear()
    usrpwd.send_keys("xxxxx")
    time.sleep(2)

    loginbt = form.find_elements_by_tag_name('button')
    loginbt[1].click()
    time.sleep(5)

    wait = WebDriverWait(driver, 10)
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/section/main/div/div/div/div/button"))).click()

    time.sleep(2)
    wait = WebDriverWait(driver, 10)
    wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']"))).click()
    return driver

请找出以下错误:

    Traceback (most recent call last):
  File "/home/Instagram/insta.py", line 539, in <module>
    (driver, postauth, hlist) = get_instalinks(x) 
  File "/home//PycharmProjects(SEP)/Instagram/insta.py", line 76, in get_instalinks
    driver = instagram_login()
  File "/home/Instagram/insta_.py", line 56, in instagram_login
    wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']"))).click()
  File "/usr/local/lib/python3.8/dist-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

【问题讨论】:

  • 你看到了什么错误?
  • selenium.common.exceptions.TimeoutException:消息:
  • 你能用 url 和异常详细信息更新问题吗?
  • 请立即查看。我已经更新了代码。
  • drive.get() 之后,您可以使用drive.page_source 从浏览器获取HTML,您可以检查print( drive.page_source ) 或将其保存在文件中并在编辑器或Web 浏览器中打开以查看您得到的结果。因为drive.page-source 给出了字符串,所以你可以使用字符串的函数来搜索元素,或者你可以将它与BeautifulSouplxml 一起使用来搜索HTML 中的标签。

标签: python selenium google-chrome selenium-webdriver selenium-chromedriver


【解决方案1】:

问题在于您的 User-Agent。有些网站会在您浏览时检查您的用户代理,以减少刮板的使用。如果他们发现任何可疑之处,他们将限制(或完全限制)您在该页面上的活动。

当您使用普通的 headed chrome 时,您的用户代理将遵循以下格式:

Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/96.0.4664.45 Safari/537.36

当您使用 headless chrome 时,您的用户代理将遵循以下格式:

Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)HeadlessChrome/96.0.4664.45 Safari/537.36


Instagram 识别出错误的用户代理并限制访问。您应该实现以下 Chrome 选项来规避此限制:

chrome_options.add_argument("USER AGENT")

将上面的“USER AGENT”替换为从此链接看到的内容:My User Agent


此外,为了增加一层额外的安全性,我建议您遵循this article 的内容,了解如何在无头模式下浏览时尽可能使您的抓取工具无法检测到。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多