求教:如何让 selenium 在 headless 环境处理有延时才能点击的按钮

2023-07-11 11:54:57 +08:00
 yaleyu

有的页面打开有个按钮是不可点击,要延时几秒才会变成可点击状态,然后要处理点击后的页面。比如这个 https://ouo.io/go/yq25z

from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'btn-main')))
element.click()

在无图形界面的 Ubuntu Server 上运行,加了chrome_options.add_argument('--headless')就不工作,加上 time.sleep(15)也不行。

在 macOS 上运行,不加--headless ,每次运行自动打开 Chrome 就能正常处理后续的工作。

请问怎么让它在无图形界面的环境也能工作?

1283 次点击
所在节点    Python
9 条回复
jjplay
2023-07-11 11:59:20 +08:00
装虚拟屏幕 xvfb
yaleyu
2023-07-11 12:07:35 +08:00
@jjplay 赞!所以说,selenium 的某些功能就不能无头?我以为是没用对
wgit
2023-07-11 12:14:04 +08:00
不是可以等待某个元素吗 等待多少秒,然后间隔多久检查一次
还能基于标签属性 去判断按钮是否是可用状态
yaleyu
2023-07-11 12:29:21 +08:00
@wgit 嗯,这些都做了,现在的问题是在无头环境下不工作,有头环境下就一切正常。
harrozze
2023-07-11 13:18:26 +08:00
@yaleyu #4 过若干秒截屏,看看按钮的视觉状态是什么。同时把按钮的 html computed 以后的属性打出来看看
girl1462235
2023-07-11 20:19:10 +08:00
其实。。。 你设置一个 UserAgent 就好了
girl1462235
2023-07-11 21:27:23 +08:00
yaleyu
2023-07-12 17:48:14 +08:00
@girl1462235 哎,真的行,看来页面做了一定的反爬,有头时候是真正打开浏览器,无头时候被反爬了
yaleyu
2023-07-12 18:29:24 +08:00
@yaleyu 弄错了,再试了几次,无头还是不行,xvfb 加 pyvirtualdisplay 应该是我想要的解决方式。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/955780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX