【问题标题】:Can't run Chrome in headless mode using Selenium无法使用 Selenium 在无头模式下运行 Chrome
【发布时间】:2023-01-22 21:59:19
【问题描述】:

所以首先是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
from fake_useragent import UserAgent
import random

ua = UserAgent()

options = Options()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--blink-settings=imagesEnabled=false')
chrome_options.add_argument('--headless')
chrome_options.add_argument(f'user-agent={ua.random}')
driver = webdriver.Chrome(options=options, chrome_options=chrome_options)
driver.maximize_window()
url = "https://magiceden.io/marketplace/hasuki"
driver.get(url)
element = driver.find_element(By.CSS_SELECTOR, "#content > div.tw-w-full.tw-py-0.sm\:tw-mt-0 > div.tw-flex.tw-relative > div.tw-flex-auto.tw-max-w-full.tw-pt-0 > div.tw-flex.tw-items-center.md\:tw-justify-between.tw-gap-2.md\:tw-gap-4.md\:tw-sticky.tw-top-\[133px\].tw-bg-gray-100.tw-z-10.tw-flex-wrap.tw-p-5 > div.tw-flex.tw-flex-grow.tw-justify-center.tw-gap-x-2 > button > span:nth-child(4)")
print(f"The current instant sell price is {element.text}")

当我运行它时,出现奇怪的长错误,最后是:

Backtrace:
        (No symbol) [0x00806643]
        (No symbol) [0x0079BE21]
        (No symbol) [0x0069DA9D]
        (No symbol) [0x006D1342]
        (No symbol) [0x006D147B]
        (No symbol) [0x00708DC2]
        (No symbol) [0x006EFDC4]
        (No symbol) [0x00706B09]
        (No symbol) [0x006EFB76]
        (No symbol) [0x006C49C1]
        (No symbol) [0x006C5E5D]
        GetHandleVerifier [0x00A7A142+2497106]
        GetHandleVerifier [0x00AA85D3+2686691]
        GetHandleVerifier [0x00AABB9C+2700460]
        GetHandleVerifier [0x008B3B10+635936]
        (No symbol) [0x007A4A1F]
        (No symbol) [0x007AA418]
        (No symbol) [0x007AA505]
        (No symbol) [0x007B508B]
        BaseThreadInitThunk [0x75EB00F9+25]
        RtlGetAppContainerNamedObjectPath [0x77A27BBE+286]
        RtlGetAppContainerNamedObjectPath [0x77A27B8E+238]

但是,如果我注释掉“chrome_options.add_argument('--headless')”,我的代码就可以正常工作。这里有什么问题?我想问题是网站不允许我使用无头模式,我该如何解决?

我希望我的程序以无头模式运行,但我受到网站或 chrome 浏览器的限制。

【问题讨论】:

  • 使用完整的错误堆栈跟踪更新问题。

标签: python selenium automation screen-scraping google-chrome-headless


【解决方案1】:

将此参数添加到您的代码中:

chrome_options.add_argument('--disable-gpu')

【讨论】:

  • 你能解释一下--disable-gpu如何帮助解决(No symbol)GetHandleVerifierBaseThreadInitThunkRtlGetAppContainerNamedObjectPath吗?
  • 它没有帮助:(
【解决方案2】:

基本上,您看到的是 NoSuchElementException

完整的堆栈跟踪:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#content > div.tw-w-full.tw-py-0.sm:tw-mt-0 > div.tw-flex.tw-relative > div.tw-flex-auto.tw-max-w-full.tw-pt-0 > div.tw-flex.tw-items-center.md:tw-justify-between.tw-gap-2.md:tw-gap-4.md:tw-sticky.tw-top-[133px].tw-bg-gray-100.tw-z-10.tw-flex-wrap.tw-p-5 > div.tw-flex.tw-flex-grow.tw-justify-center.tw-gap-x-2 > button > span:nth-child(4)"}
  (Session info: headless chrome=109.0.5414.75)
Stacktrace:
Backtrace:
    (No symbol) [0x00E04AD3]
    (No symbol) [0x00D99211]
    (No symbol) [0x00C8D9CD]
    (No symbol) [0x00CC1102]
    (No symbol) [0x00CC123B]
    (No symbol) [0x00CF8A72]
    (No symbol) [0x00CDFB84]
    (No symbol) [0x00CF67B9]
    (No symbol) [0x00CDF936]
    (No symbol) [0x00CB4788]
    (No symbol) [0x00CB5C1D]
    GetHandleVerifier [0x01079342+2502274]
    GetHandleVerifier [0x010A7959+2692249]
    GetHandleVerifier [0x010AABDC+2705180]
    GetHandleVerifier [0x00EB3480+643008]
    (No symbol) [0x00DA208F]
    (No symbol) [0x00DA7AB8]
    (No symbol) [0x00DA7BA5]
    (No symbol) [0x00DB273B]
    BaseThreadInitThunk [0x76D9FA29+25]
    RtlGetAppContainerNamedObjectPath [0x77B37A4E+286]
    RtlGetAppContainerNamedObjectPath [0x77B37A1E+238]

解决方案

所需的元素是一个动态元素,因此理想情况下,要从您需要为 visibility_of_element_located() 引入 WebDriverWait 的元素中打印所需的文本,您可以使用以下 Locator Strategy

  • 使用CSS_SELECTOR

    driver.get("https://magiceden.io/marketplace/hasuki")
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#content > div.tw-w-full.tw-py-0.sm:tw-mt-0 > div.tw-flex.tw-relative > div.tw-flex-auto.tw-max-w-full.tw-pt-0 > div.tw-flex.tw-items-center.md:tw-justify-between.tw-gap-2.md:tw-gap-4.md:tw-sticky.tw-top-[133px].tw-bg-gray-100.tw-z-10.tw-flex-wrap.tw-p-5 > div.tw-flex.tw-flex-grow.tw-justify-center.tw-gap-x-2 > button > span:nth-child(4)"))).text)
    driver.quit()
    
  • 控制台输出:

    0.3664
    
  • 笔记:您必须添加以下导入:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-12
    • 2018-03-16
    • 2021-07-11
    • 1970-01-01
    • 2021-09-19
    • 2020-02-10
    • 2018-01-19
    • 2019-06-12
    相关资源
    最近更新 更多