python - 如何使用 Selenium 和 Python 3.7.4 从一系列复选框中找到一个特定的复选框
问题描述
我正在尝试开发一个自动处理从网站上删除各种帖子的机器人。我偶然发现了一个重大问题,使我无法继续进行下去。
我打开的页面显示了带有以下输入的各种复选框:
<input type="checkbox" name="ids[]" value="305664759" onclick="toggleDeleteButtons()">
我要做的是同时检查每个复选框,然后单击删除按钮。然后会出现一个弹出窗口,我必须单击另一个“删除”按钮并输入以下输入:
<input id="btnDelAds" class="button" href="javascript:void(0)" onclick="document.manageads.cmd.value='del';if (submit_batch_delete()){document.manageads.submit();}else{closeDialogDelete();}">
然后会出现另一个弹出窗口进行确认,但这是另一个问题。事实上,当我试图找到复选框时,麻烦就来了。
这是处理网站第一部分的代码,并找到复选框:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
#HANDLING ACCESS
email = "somemail"
password = "somepass"
driver = webdriver.Firefox()
driver.get("https://www.somesite.it/account/manageads")
login_field = driver.find_element_by_id("login_email")
login_field.clear()
login_field.send_keys(email)
login_field = driver.find_element_by_id("login_passwd")
login_field.clear()
login_field.send_keys(password)
login_field.send_keys(Keys.ENTER)
#HANDLING DELETE OF POSTS
while True:
try:
elem = driver.find_element_by_xpath("//input[@type='checkbox' and contains(@name, 'id')")
print("Found")
except NoSuchElementException:
print("End")
break
elem.click()
(我已经审查了网站网址和凭据)
print("Found")
子句显然没有执行。这个想法是连续检查每个复选框,可能我以错误的方式完成了这个。
我得到的是控制台中的“END”。任何帮助将不胜感激。提前致谢。
解决方案
要触发文本为Delete的弹出窗口的存在,您必须诱导WebDriverWait为所需的,您可以使用以下任一Locator Strategies:element_to_be_clickable()
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name^='ids'][onclick^='toggleDeleteButtons'][type='checkbox']"))).click()
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[starts-with(@name, 'ids') and starts-with(@onclick, 'toggleDeleteButtons')][@type='checkbox']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
推荐阅读
- reactjs - Nextjs Bootstrap 正在覆盖 CSS
- excel - Excel VBA - 如何检查目标是否为命名范围。如果是,粘贴范围
- javascript - Vuetify.js:
圆角 - angular - ngx-translate,有没有办法用多个键翻译字符串
- python - Kaggle空客船舶检测挑战。如何处理类不平衡?
- matlab - MATLAB 类效率
- typescript - 可观察链、flatMap 和类型转换
- go - 无法从 Go 安装 revel 框架
- css - 如何使用 Microsoft Edge 和 Internet Explorer 11 开发人员工具检查伪元素
- python - 用 n-1 替换缺失值