我在 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 无法控制 各种破坏广场的意图。
我已尝试以下方法来解决无头模式下的问题:
我在无头模式下添加了一条打印语句(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>
有人经历过类似的事情或知道如何确保页面在无头模式下完全加载吗?
您可能会遇到 Github 问题(Seleniu 无人驾驶,而不是 SB)。
因此,这可能是 Seleniumbase 中的一个错误。您可以考虑在 github.com/seleniumbase/SeleniumBase/issues
提交问题作为解决方法,请尝试降级到
chrome<130
,例如通过 github.com/ScoopInstaller/Extras/commits/master/bucket/googlechrome.json 的链接
免责声明:我是
driverless
的开发者