我试图访问一个白色的网站,但是python无法找到ID或名称。 这是代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox(executable_path='D:\code\geckodriver.exe')
browser.get('http://admin.chhs.edu.my/schooladmin/jw/login.php')
assert "教务系统" in browser.title
def login():
elem = browser.find_element_by_name('txtUserName')
elem.send_keys('sportday')
elem = browser.find_element_by_name('txtPassWord')
elem.send_keys('xxxxxx')
elem.send_keys(Keys.RETURN)
def search():
elem2 = browser.find_element_by_name('txtFind')
elem2.send_keys('14066')
elem2.send_keys(Keys.RETURN)
login()
search()
以及我正在访问的网站的html:
<form name="search" method="post" action="http://admin.chhs.edu.my/schooladmin/jw/index.php">
<input name="txtFind" id="txtFind" type="text">
<input name="button" id="button" value="搜寻" type="submit">
</form>
注意,由于某些隐私问题,密码不正确。
此问题已解决,谢谢大家
答案 0 :(得分:0)
您只发布了一些html。一种选择是登录的定位器无效。另一个选择是程序在页面加载之前开始寻找元素。在这种情况下,异常会指出找不到该元素。
我遇到了类似的问题,对我有用的是在新页面中要搜索的第一个元素上放置一个explicit wait
。显式等待将等待指定的时间,以便满足指定的条件。
例如:
element = WebDriverWait(driver, seconds).until(EC.presence_of_element_located(By.NAME, 'txtuserame'))
或者,您可以使用implicit wait
,理想情况下,如果页面尚未加载,驱动程序将等待指定的时间 。以我的经验,它非常依赖于网站,并且经常无法按预期运行。
Python中的隐式等待的示例为driver.implicitly_wait(10)
隐式等待与驱动程序而不是元素有关,并且在驱动程序实例的生命周期内一直有效。
您可以找到有关等待here的更多信息,还可以找到expected conditions
可以与explicit wait
here一起使用的列表。
答案 1 :(得分:0)
要将字符序列发送到 Search 字段,您必须诱使 WebDriverWait 使所需的元素可点击,如下所示:>
代码块:
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
from selenium.webdriver.common.keys import Keys
browser=webdriver.Firefox(executable_path=r'C:\WebDrivers\GeckoDriver\geckodriver-v0.20.1-win64\geckodriver.exe')
browser.get('http://admin.chhs.edu.my/schooladmin/jw/login.php')
assert "教务系统" in browser.title
def login():
elem = browser.find_element_by_name('txtUserName')
elem.send_keys('sportday')
elem = browser.find_element_by_name('txtPassWord')
elem.send_keys('123456')
elem.send_keys(Keys.RETURN)
def search():
elem2 = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#txtFind")))
elem2.send_keys('14066')
elem2.send_keys(Keys.RETURN)
login()
search()
浏览器快照:
答案 2 :(得分:0)
替换此代码:
def search():
elem2 = browser.find_element_by_name('txtFind')
elem2.send_keys('14066')
elem2.send_keys(Keys.RETURN)
对此:
def search():
elem2 = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, "txtFind")))
elem2.send_keys('14066')
elem2.send_keys(Keys.RETURN)
请注意,如果给出了 ID ,则无需进行任何定位。