通过Python和Selenium选择单选按钮——常见问题和解决方案

45 阅读1分钟

一位新手正在使用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()