【问题标题】:selenium using python: how to correctly click() an element?selenium 使用 python:如何正确单击()元素?
【发布时间】:2019-10-23 17:38:26
【问题描述】:

在学习如何使用 selenium 时,我尝试单击一个元素但没有任何反应,并且无法进入下一页。这是相关页面:http://buyme.co.il 我试图点击:הרשמה

我设法打印了所需的元素 (הרשמה),所以我猜我到达了页面中的正确位置。但“点击()”不起作用。 第二个跨度<span>הרשמה</span> 是我要点击的:

<li data-ember-action="636">
        <a>
            <span class="seperator-link">כניסה</span>
            <span>הרשמה</span>
        </a>
 </li>
for elem in driver.find_elements_by_xpath('//* [@id="ember591"]/div/ul[1]/li[3]/a/span[2]'):
    print (elem.text)
    elem.click()

也试过这个:

driver.find_element_by_xpath('//*[@id="ember591"]/div/ul[1]/li[3]/a').click()

我希望进入包含注册字段的“灯箱”。 对实现这一目标的最佳方式有何想法?

【问题讨论】:

  • 您可以使用pyautogui 模块。你可以找到文档here
  • @ArnavPoddar 这是一个有趣的想法,但我专门尝试使用 selenium 来完成这项任务。
  • 好的,祝你的程序好运

标签: python selenium xpath webdriverwait xpath-1.0


【解决方案1】:

Explicit Waits - 显式等待是您定义的代码,用于等待特定条件发生,然后再继续执行代码。

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

browser = webdriver.Chrome()
browser.get("https://buyme.co.il/")

WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, 'ember591')))

elm = browser.find_elements_by_xpath('//div[@id="ember591"]/div/ul[1]/li[3]/a')

elm[0].click()

更新:

WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'login')))

email = browser.find_elements_by_xpath("//form[@id='ember1005']/div[1]/label/input")
email[0].send_keys("abc@gmail.com")

password = browser.find_elements_by_xpath("//form[@id='ember1005']/div[2]/label/input")
password[0].send_keys("test1234567")

login = browser.find_elements_by_xpath('//form[@id="ember1005"]/button')
login[0].click()

【讨论】:

  • 看起来很有效。但是浏览器即将关闭,所以我不确定我是否到达了“灯箱”。有没有办法让它保持打开状态?
  • @holder 始终使用 WebDriverWait 等待 utils 对象不可用,或者如果您不了解 HTML 元素,请使用 time module.import time
  • time.sleep(4)
【解决方案2】:

所需元素是启用Ember.js 的元素,因此要找到您必须诱导WebDriverWait 以使元素可点击 的元素,您可以使用以下@ 987654322@:

  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='הרשמה']"))).click()
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 看起来你的方法也有效。谢谢。我不熟悉 Ember.js 或 javascript,所以感谢您提供的信息。另外,在你写的代码中:expected_conditions as EC 这是必要的还是你可以只使用expected_conditions
  • @holder 根据我的导入from selenium.webdriver.support import expected_conditions as EC,为了便于使用,我将长 expected_conditions 加甜为 EC
  • 不错!所以进一步移动,我试图点击“灯箱”内的其他元素。不想因为每个元素都打扰你们,我需要理解这个逻辑。我尝试使用以下方法单击להרשמהdriver.find_element_by_xpath('//*[@id="ember572"]/div/div[1]/div/div/div[3]/p/span[text()=להרשמה]').click() 这种方法有什么问题?
  • @holder 我们不要延长这个讨论,因为你有一个公认的答案。祝你好运?
猜你喜欢
  • 2021-03-31
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2021-12-28
  • 2021-12-09
相关资源
最近更新 更多