【问题标题】:Selenium Python: Can't click the buttonSelenium Python:无法单击按钮
【发布时间】:2020-07-30 18:23:26
【问题描述】:

希望你们都平安!

我的问题很常见,我见过很多类似的问题,尽管“等待/明确等待/等到可点击等”之类的问题对我不起作用。我想我想为这个问题寻求量身定制的解决方案:)

我尝试从http://kuap.ru/banks/8012/balances/en这里抓取一些数据(我使用的是俄罗斯语言版本的网站,但我认为来源必须非常相似)

为此,我必须从下拉列表中选择适当的数据,然后按“比较数据”按钮。但是,我无法单击该按钮。

The button

我的简单代码:

driver.find_element_by_css_selector('select[name = CurDate]').click()
select = Select(driver.find_element_by_css_selector('select[name = CurDate]'))
select.select_by_visible_text('01.01.2019')
driver.find_element_by_xpath('//*[@id="BalanceTable"]/thead/tr[1]/th[3]/input').click()

最后一行实际上没有点击。我已经看到很多次问题出在路径上,我尝试了几个 CSS 路径 - 没有任何效果。看起来同样的问题在这里:当我尝试获取按钮的 .text 时,它返回 ' ',而对于其他按钮,它返回它们的实际文本。

我的主要假设是问题可能出在这个神秘的“影子内容”中 (See a snapshot) 我无法在 Safari 中查看它。我试图通过“...input//”访问它(虽然它有点愚蠢,我知道),但没能看到它。我读过一些关于 DOM 等的东西......但它并没有真正帮助(或者我读得很糟糕)

所以,任何有用的提示都会非常有价值!已经在这个非常基本的东西上花了几个小时:)

附:完全公开 - 我是 Python 的超级新手,试图从一开始就了解数据收集。

【问题讨论】:

    标签: python selenium button


    【解决方案1】:

    试试下面的 xpath :

     wait = WebDriverWait(driver, 30)
     wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='btn btn-default']"))).click()
    

    注意:请在您的解决方案中添加以下导入

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    

    工作代码:

    driver.get('http://kuap.ru/banks/8012/balances/en')
    wait = WebDriverWait(driver, 10)
    select = Select(driver.find_element_by_xpath("//select[@name='CurDate']"))
    select.select_by_visible_text('01.01.2019')
    wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='btn btn-default']"))).click()
    

    另一种使用java脚本的解决方案::

    element=wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='btn btn-default']")))
    driver.execute_script("arguments[0].click();", element)
    

    【讨论】:

    • @Gcube:你会不会好心accept回答并从你的最后点击upvote按钮。
    • 您好 Dipak,感谢您的快速回复。但是,它没有帮助:(我很确定它一定是你使用的 safari vs chrome。因为我用你的代码得到的和我以前得到的几乎一样——改变下拉列表(很好)但是数字不会改变(即按钮没有被点击)。
    • 是的,我用过 chrome 浏览器,请问您遇到什么错误,请检查您的缩放级别,我添加了另一个使用 java 脚本的解决方案,请检查一下
    • 再次感谢! 1)首先,JS解决方案有效。但是对于像我这样的编程菜鸟来说,这就像跳入另一个维度:) 2) 对于 Python 解决方案:实际上没有错误。它可以工作,但按钮没有任何反应 3) 我用它来缩放: driver.maximize_window() driver.execute_script("window.scrollTo(0, 100)") 但这有关系吗?无论如何,非常感谢,这有帮助。但如果你有时间 - 我真的很好奇为什么它不能与原始代码一起使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多