脚本在非无头模式下工作,但在无头模式下失败并出现“找不到元素”错误

问题描述 投票:0回答:1

我在 Python 中使用 SeleniumBase 来自动化网页上的交互。我的脚本在非无头模式下完美运行,但是当我将其设置为无头(headless=True 或 headless2=True)时,即使在多次滚动尝试之后,它也无法找到某些元素,特别是#card-lib-selectCompany-change。这是我的代码的相关部分

从 seleniumbase 导入 SB

def scrape_servipag_service_reading(service_type, company, identifier):
    result = None
    with SB(uc=True, headless2=True) as sb:
        try:
            sb.set_window_size(1920, 1080)
            url = f"https://portal.servipag.com/paymentexpress/category/{service_type}"
            sb.uc_open_with_reconnect(url, 4)
            sb.uc_gui_click_captcha()
            sb.sleep(10)

            # Scroll to find element
            for _ in range(30):
                sb.execute_script("window.scrollBy(0, 100);")
                sb.sleep(0.2)
                if sb.is_element_visible("#card-lib-selectCompany-change"):
                    break

            sb.wait_for_element("#card-lib-selectCompany-change", timeout=100)
            sb.select_option_by_text("#card-lib-selectCompany-change", company)
            # More interactions follow...

        except Exception as e:
            print(f"Error: {e}")
    return result

当我在非无头模式下运行此代码时,它会毫无问题地找到 #card-lib-selectCompany-change 并与之交互。但是,在无头模式下,我收到错误:

Elemento #card-lib-selectCompany-change 无法控制 各种破坏广场的意图。

我已尝试以下方法来解决无头模式下的问题:

  1. 设置自定义用户代理。
  2. 将视口大小明确设置为 1920x1080。
  3. 添加更多滚动尝试和睡眠间隔。
  4. 在 headless=True 和 headless2=True 之间切换。

我在无头模式下添加了一条打印语句(headless=True),它返回的结果看起来好像从未真正加载过预期的页面。这是 URL 和页面源的输出:

 print("Current URL:", sb.get_current_url())
 print("Page Source:", sb.get_page_source())

URL和页面源显示与目标页面无关的内容:

 Current URL:
 chrome-extension://neajdppkdcdipfabeoofebfddakdcjhd/audio.html 
 Page Source: <html><head></head><body>   <script
 src="audio.js"></script><audio></audio> </body></html>

有人经历过类似的事情或知道如何确保页面在无头模式下完全加载吗?

python selenium-webdriver seleniumbase
1个回答
0
投票

您可能会遇到 Github 问题(Seleniu 无人驾驶,而不是 SB)。

因此,这可能是 Seleniumbase 中的一个错误。您可以考虑在 github.com/seleniumbase/SeleniumBase/issues

提交问题

作为解决方法,请尝试降级到

chrome<130
,例如通过 github.com/ScoopInstaller/Extras/commits/master/bucket/googlechrome.json

的链接

免责声明:我是

driverless

的开发者
© www.soinside.com 2019 - 2024. All rights reserved.