硒使用Python:如何正确click()一个元素?

时间:2019-06-08 14:51:03

标签: python selenium xpath webdriverwait xpath-1.0

在学习如何使用硒的同时,我试图单击一个元素,但是什么也没有发生,因此我无法到达下一页。这是相关的页面:http://buyme.co.il,我正在尝试点击:הרשמה

我设法打印了所需的元素(הרשמה),所以我想我到达了页面中的正确位置。但“ click()”无效。 我要单击第二个跨度<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()

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

2 个答案:

答案 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()

enter image description here

更新

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()

enter image description here

答案 1 :(得分:0)

所需的元素是启用了Ember.js的元素,因此要定位该元素,必须诱使 WebDriverWait 使元素可点击,并且可以使用跟随Locator Strategy

  • 使用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