Python 我的脚本无法单击某个网格
我已经用python结合selenium编写了一个脚本,以从网页中获取一些信息。要获得内容,需要跨越几个步骤,如在接受条件中,Python 我的脚本无法单击某个网格,python,python-3.x,selenium,selenium-webdriver,web-scraping,Python,Python 3.x,Selenium,Selenium Webdriver,Web Scraping,我已经用python结合selenium编写了一个脚本,以从网页中获取一些信息。要获得内容,需要跨越几个步骤,如在接受条件中,填写输入框,点击搜索按钮来填充结果,最后点击填充表中的第一个网格(更具体地说是第一个tr)。在第一个tr上启动任何单击后,一个新页面(包含所需信息)将打开 我的脚本可以成功地完成前三个步骤。我不能做的是: 单击第一个tr 聚焦到新打开的选项卡(包含我想要的信息) 要访问内容: 这是接下来的事情。首先单击“接受”按钮。然后有一个输入框名称,要用HMC设计组填写。现在,按下搜
填写输入框,点击搜索按钮来填充结果,最后点击填充表中的第一个网格(更具体地说是第一个tr)。在第一个tr上启动任何单击后,一个新页面(包含所需信息)将打开
我的脚本可以成功地完成前三个步骤。我不能做的是:
单击第一个tr
聚焦到新打开的选项卡
(包含我想要的信息)
要访问内容:
这是接下来的事情。首先单击“接受”按钮。然后有一个输入框名称
,要用HMC设计组
填写。现在,按下搜索按钮,结果应该显示在下面的表格中。从那里我需要点击第一个tr
这就是我迄今为止所尝试的:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
link = "https://officialrecords.broward.org/AcclaimWeb/search/SearchTypeName"
def get_information(driver,url):
driver.get(url)
wait.until(EC.element_to_be_clickable((By.ID, "btnButton"))).click()
wait.until(EC.presence_of_element_located((By.ID,"SearchOnName"))).send_keys("HMC DESIGN GROUP")
wait.until(EC.presence_of_element_located((By.ID, "btnSearch"))).click()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,".t-grid-content table tr"))).click()
if __name__ == "__main__":
driver = webdriver.Chrome()
wait = WebDriverWait(driver,10)
try:
get_information(driver,link)
finally:
driver.quit()
当前,脚本既没有单击网格新生成表的第一个tr,也没有抛出任何错误。它优雅地退出浏览器。只需更换此css选择器即可:
.t-grid-content table tr
要此:
.t-grid-content table tr.t-state-selected:first-child
用于单击第一个tr
在单击第一个tr之前,将窗口句柄存储为:
window_before = driver.window_handles[0]
单击第一个tr后,将新打开窗口的窗口句柄存储为:
window_after = driver.window_handles[1]
现在,您只需将web驱动程序的焦点切换到新打开的窗口。如下所示:
driver.switch_to_window(window_after)
在div
下还有另一个表
,它具有相同的类名“t-grid-content”
。它显示为“正在加载…”
。因此,在您提交搜索后,您确实可以使用选择器“”.t-grid-content table tr“
”单击节点,但这并没有产生适当的效果
您只需要更具体的选择器
例如,试试看
wait.until(EC.element_to_be_clickable((By.XPATH, "//td[contains(., 'HMC DESIGN GROUP')]")))
若要切换到新窗口,请尝试将函数体更新为
driver.get(url)
current = driver.current_window_handle
wait.until(EC.element_to_be_clickable((By.ID, "btnButton"))).click()
wait.until(EC.presence_of_element_located((By.ID,"SearchOnName"))).send_keys("HMC DESIGN GROUP")
wait.until(EC.presence_of_element_located((By.ID, "btnSearch"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//td[contains(., 'HMC DESIGN GROUP')]"))).click()
driver.switch_to.window([window for window in driver.window_handles if window != current][0])
像魔术一样工作,先生。我在我的帖子里还有一个问题:如何切换到新打开的标签?非常感谢。@Andersson:正如OP所说的,他想点击第一个tr,所以点击tr的中间部分会很有意义,我们可以给他css选择器而不是xpath。@cruisepandey,我不确定我是否理解你的意思“//td[包含(,'HMC DESIGN GROUP')]”“
从第一个tr
返回表单元格。这很好。但您正在搜索的名称列中查找元素,对吗?我要说的是查找完整的tr,然后单击它的中间部分(默认的单击将在中间部分执行)。所以在我看来,给他一整排tr是很有意义的。完成新页面上的所有必需操作后,使用driver.close()
关闭新窗口,并使用driver.switch\u to.default\u content()
返回主屏幕。我尝试了(多次)使用选择器,但无法启动单击。正如您已经知道的,当成功执行单击时,将打开一个新选项卡。