一位新手正在使用Python和Selenium来自动化网页测试。他在尝试选择页面上的第三个单选按钮时遇到了问题。他使用了以下代码:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
import smtplib
import time
date = time.strftime("%d %b %Y" + ", " + "%H:%M%p")
print (time.strftime("%d %b %Y" + ", " + "%H:%M%p"))
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.water.nsw.gov.au/water-licensing/registers")
driver.implicitly_wait(10)
driver.find_element_by_xpath('// [@id="wizard_tabs"]/div/div[1]/div/ul/li[3]/input').click()
但是,当他运行这段代码时,遇到了以下错误:
"Message: no such element: Unable to locate element:
{"method":"xpath","selector":"//[@id="wizard_tabs"]/div/div[1]/div/ul/li[3]/input"}"
2. 解决方案
解决方案一:
在寻找元素之前,需要显式等待页面加载完成。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import smtplib
import time
date = time.strftime("%d %b %Y" + ", " + "%H:%M%p")
print (time.strftime("%d %b %Y" + ", " + "%H:%M%p"))
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.water.nsw.gov.au/water-licensing/registers")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '// [@id="wizard_tabs"]/div/div[1]/div/ul/li[3]/input')))
driver.find_element_by_xpath('// [@id="wizard_tabs"]/div/div[1]/div/ul/li[3]/input').click()
解决方案二:
在寻找元素之前,需要确保页面上的所有元素都已加载完成。可以通过使用显式等待来实现。显式等待会等待直到某个元素出现在页面上,然后才执行后续操作。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import smtplib
import time
date = time.strftime("%d %b %Y" + ", " + "%H:%M%p")
print (time.strftime("%d %b %Y" + ", " + "%H:%M%p"))
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.water.nsw.gov.au/water-licensing/registers")
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '// [@id="wizard_tabs"]/div/div[1]/div/ul/li[3]/input')))
driver.find_element_by_xpath('// [@id="wizard_tabs"]/div/div[1]/div/ul/li[3]/input').click()
解决方案三
定位元素时,使用更准确的定位方式。例如,可以使用CSS选择器或ID选择器来定位元素。
from selenium import webdriver
import smtplib
import time
date = time.strftime("%d %b %Y" + ", " + "%H:%M%p")
print (time.strftime("%d %b %Y" + ", " + "%H:%M%p"))
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.water.nsw.gov.au/water-licensing/registers")
driver.find_element_by_css_selector('#wizard_tabs > div > div:nth-child(1) > div > ul > li:nth-child(3) > input').click()