【问题标题】:Selenium button click works in Python console but not scriptSelenium 按钮单击在 Python 控制台中有效,但在脚本中无效
【发布时间】:2019-05-27 18:53:56
【问题描述】:

我有以下 Python 代码使用 Selenium 自动按下按钮:

from selenium import webdriver
import time

def main():
    page_url = 'x.htm?'
    driver = webdriver.Safari()
    driver.get(page_url)
    time.sleep(2)
    elem = driver.find_element_by_xpath('yy')
    elem.click()
    driver.quit()

if __name__ == '__main__':
    main()

我已删除 URL 和按钮,但它们是有效的。当我将代码复制到交互式 Python 控制台中时,它会运行并且单击有效;浏览器被重定向。但是当我将代码作为脚本运行时,点击不会发生(浏览器出现并且页面呈现但点击未注册)。

希望能帮助您理解为什么会这样。

【问题讨论】:

  • 尝试在elem = driver.find_element_by_xpath('yy') 之前添加一些睡眠以等待页面加载。
  • 是否会在无头浏览器中引发异常,如果是,请告诉我
  • 我认为睡眠应该可以解决问题,正如 yong 所说的
  • @yong 我尝试添加睡眠,但不起作用。
  • @iamsankalp89 没有例外

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

正如您所提到的 ...将代码复制到它运行的交互式 Python 控制台中并且单击有效...这意味着即使有 2 秒的 @ 元素也不会变成 clickable 987654322@.


解决方案

理想情况下,点击你需要为element_to_be_clickable()诱导WebDriverWait的元素,你可以使用以下基于Locator Strategy

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "yy"))).click()

注意:您必须添加以下导入:

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
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 2018-09-08
    • 2015-08-29
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多