使用 python 的硒:如何正确点击()一个元素?
selenium using python: how to correctly click() an element?
在学习如何使用 selenium 时,我尝试单击一个元素但没有任何反应,我无法到达下一页。这是相关页面: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()
我希望进入包含注册字段的 "lightbox"。
对实现此目标的最佳方式有何想法?
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()
所需的元素是 Ember.js enabled element so to locate the element you have to induce WebDriverWait for the element to be clickable and you can use the following :
使用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
在学习如何使用 selenium 时,我尝试单击一个元素但没有任何反应,我无法到达下一页。这是相关页面: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()
我希望进入包含注册字段的 "lightbox"。 对实现此目标的最佳方式有何想法?
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()
所需的元素是 Ember.js enabled element so to locate the element you have to induce WebDriverWait for the element to be clickable and you can use the following
使用
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