Python selenium 无法点击按钮

标签 python python-3.x selenium selenium-webdriver web-scraping

我使用 selenium 在 python 中编写了一个脚本来访问特定页面。到达那里需要跨越五个台阶。首先,我的浏览器必须单击“按地址搜索”按钮,然后在框中输入“街道名称”,并在相应框中输入“街道地址”,然后单击搜索按钮才能到达目标页面。但是,我在第一次尝试单击“按地址搜索”按钮时遇到错误。看来我照做了,但不知道我在哪里犯了错误。预先感谢您查看一下。 我正在尝试使用的脚本:

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    

driver = webdriver.Chrome()
driver.get("http://hcad.org/quick-search/")
wait = WebDriverWait(driver, 10)
driver.find_element_by_id("s_addr").click()
driver.find_element_by_name('stnum').send_keys('8227')
driver.find_element_by_name('stname').send_keys('FINDLAY ST')
driver.find_element_by_link_text("Search").click()
driver.quit()

在其中找到“按地址搜索”id 按钮的元素:

<tbody><tr>
<td class="auto-style1"></td>
<td width="15" align="left" valign="top" class="auto-style1"></td>
<td width="600" align="left" valign="top" class="auto-style1">

<input type="submit" id="s_acct" value="Search By Account">&nbsp;
<input type="submit" id="s_addr" value="Search By Address">&nbsp;
<input type="submit" id="s_name" value="Search By Owner Name"><table> 
<form id="search_button" name="search_button" action="/records/QuickSearch.asp" method="post"></form>

要在框中填写其余关键字的元素:

<tr align="middle">
<td colspan="1">    
<select name="TaxYear">                         
<option value="2017">2017</option>              
</select></td>    
<td align="middle">
<input name="stnum" size="5" maxlength="5"></td>   
<td align="middle">
<input name="stname" maxlength="24">  
</td><td align="middle">
<nobr><input type="submit" value="Search"></nobr>
</td>
</tr>

我收到的错误:

    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:

最佳答案

您需要等待 iframe 可用,并在可用时切换到它。

...
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, 'iframe')))
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
driver.find_element_by_id("s_addr").click()
driver.find_element_by_name('stnum').send_keys('8227')
driver.find_element_by_name('stname').send_keys('FINDLAY ST')
...

此外,使用 xpath 似乎是选择搜索按钮的更方便的方法。

driver.find_element_by_xpath("//input[@value='Search']").click()
driver.quit()

关于Python selenium 无法点击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45558433/

相关文章:

excel - 将文件压缩到字节 Python 3

python - 如果鼠标在浏览器 session 的主显示器上,为什么 Selenium 运行速度会变慢

java - Selenium 无法找到特定字段

javascript - Protractor : Issue with using executescript to execute javascript on an element

python - 随机列表选择 : How do I make sure the same item isn't ever repeated twice in a row, 一个接一个?

Python:根据对象属性从列表中删除对象

python - pandas 基于独特的值(value)观和标准

python - Numpy 整数数组转换为 numpy 数组数组

python-3.x - 使用opencv去除弧并完成矩形

python - 以编程方式将歌曲添加到 iTunes