Selenium,在检查了20页中的100多个框后难以关闭窗口,标准化代码



在以下网站https://icem.data-archive.ac.uk/#step1对于不同的国家,我必须选择所有的HISCO职业变量,这意味着点击"更多变量"。按钮和检查每个页面上的每个框。这些HISCO职业的页数是可变的,取决于县。

到目前为止,我所做的是以下格式的代码,选中每个框,然后单击下一页,以获得最大页数(20页):

webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[1]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[2]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[3]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[4]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[5]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[6]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[7]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[8]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[9]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[10]/label/input').click()
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[4]/div/div[1]/ul/li[9]/a').click()

当我尝试在一个只有17页的例子上运行这个时,检查每个框和翻页部分工作得很好。我的问题在于点击"应用"按钮。

在前面的代码中,只选择一个HISCO职业,下面的代码在单击Apply按钮时起作用:

WebDriverWait(webD, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(.,'Apply')]"))).click()

相同的命令在此设置中不起作用。只有当我在代码中勾选了精确定制的框(如果我有17页,我的代码必须只跨越17页),它才会起作用,没有其他的。由于我必须每年和每个国家都这样做,我不能定制代码,需要一个通用策略来解决这个问题。

一如既往,感谢任何帮助我的人!IDLE发送此消息:

Traceback (most recent call last):
File "C:/Users/jessi/Desktop/Selenium/RA_TASK1_ALL_HISCO_CHECKED.py", line 326, in <module>
webD.find_element_by_xpath('/html/body/div[3]/div/div/div[3]/div[6]/label/input').click()
File "C:Usersjessilibsite-packagesseleniumwebdriverremotewebdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:Usersjessilibsite-packagesseleniumwebdriverremotewebdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:Usersjessilibsite-packagesseleniumwebdriverremotewebdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:Usersjessilibsite-packagesseleniumwebdriverremoteerrorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[3]/div/div/div[3]/div[6]/label/input"}
(Session info: chrome=88.0.4324.104)

如果您想选择多个相似的元素,请尝试find_elements_by_xpath

webD.find_elements_by_xpath('/html/body/div[3]/div/div/div//label/input')将返回您想要单击的所有输入元素的列表,而不管列出了多少个元素。然后,您可以在for循环中单击它们。

您可能需要使用更好的xpath表达式,如'//div[@class="modal-body ng-scope"]//input[@type="checkbox"]'

所以基本上你想在每页上都有这样的内容:

input_elements = webD.find_elements_by_xpath('//div[@class="modal-body ng-scope"]//input[@type="checkbox"]')
for elem in input_elements:
elem.click()

最新更新