python - Selenium chrome 驱动程序 .click() 在特定网站 Python 上不起作用
问题描述
我正在尝试登录一个特定的网站,我填写了电子邮件和密码,然后我点击了“登录”,但实际上它并没有登录,而是将我重定向到主页,我研究了情况并注意到一些网站有一个“回调”功能,你可以找到 trought 控制台,事实上,当我必须注册时(没有登录,但注册)它要求我输入验证码,并且 trought 控制台我发现验证码有一个回调函数 -如果调用 - 它模拟“立即注册”按钮(我很容易发现此函数通过脚本找到链接到验证码的回调)。关键是:如果登录没有验证码,我怎样才能找到这个回调函数?我不知道如何开始,有什么建议或学习指南吗?顺便说一句,这就是我的简单脚本
driver.get("https://www.streetmachine.com/login")
time.sleep(1)
el=driver.find_element_by_name("email")
el.send_keys(lf[0])
el=driver.find_element_by_name("password")
el.send_keys(lf[1])
time.sleep(3)
el=driver.find_element_by_id("login-form-submit")
driver.execute_script("arguments[0].click();", el)
如您所见,该网站是 get() 中调用的网站,谢谢!
解决方案
您可以尝试使用“ActionChains”;首先找到元素,然后执行单击。
例如如下代码:
def click_login_button(self, **kargs):
try:
button = WebDriverWait(self.driver, 3).until(
lambda x: x.find_element_by_id("login-form-submit")
)
except TimeoutException:
pass
if not button.is_enabled():
pass
webdriver.ActionChains(self.driver).move_to_element(button).click().perform()
参考:
详细的鼠标操作,https://www.selenium.dev/documentation/en/support_packages/mouse_and_keyboard_actions_in_detail/
推荐阅读
- java - 我应该只为获取大量实体的方法解决 N+1 吗?
- c# - EF Core中的动态列名使用FormattableString c#
- python - Heroku 高级调度程序重试选项
- server - 有没有办法在服务器端 nuxtjs 上处理 POST 请求?
- javascript - 有没有办法使用单个 BS 模态和单个 JS 代码进行多次删除/确认操作?
- telegram - Telegraf.js(Telegram API) - 检测何时将机器人添加到频道并从频道中删除?
- node.js - 日志:无法从客户端接收数据:连接超时 AWS RDS POstgresql
- qt - 如何在qml中的行元素内提供自定义间距
- c# - 将 FluentValidation 8.6.2 更新到 9.5.0 抛出 MissingMethodException
- sql - 查询以获取 Oracle pl/sql 中每种类型的最新 6 条记录