python - 如何在嵌套 for 循环的最终迭代后点击返回按钮?(硒)
问题描述
所以我定义了后退按钮,只是不知道把它放在哪里或如何合并它。我正在尝试检查子类别中所有未选中的框,然后“返回”到类别以完成主要迭代并检查其余框,只是不知道如何在代码中包含后退按钮的位置以及如何.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
#driver path
PATH = "C:/Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
#access crunchbase ui
driver.get("https://www.crunchbase.com/search/organizations/field/organization.companies/categories/electric-vehicle")
driver.maximize_window()
time.sleep(5)
print(driver.title)
#navigate crunchbase & add parameters
addcolumn = driver.find_element_by_xpath('//button[@class="mat-focus-indicator add-column-button mat-stroked-button mat-button-base mat-primary"]')
addcolumn.click()
# get items only from first list
all_categories = driver.find_elements_by_xpath('(//mat-nav-list)[1]//mat-list-item')
print('len(all_categories):', len(all_categories))
for category in all_categories:
print('-----')
# select category
print('Category:', category.text.strip())
# scroll it to make it visible and clickable
#driver.execute_script("arguments[0].scrollIntoView(true);", category)
# or
ActionChains(driver).move_to_element(category).perform()
# click category to display list of columns in this category
category.click()
time.sleep(0.5)
# search columns ONLY in selected category
# it selects item only if `mat-checkbox` doesn't have class `mat-checkbox-checked`
# and it click `label` instead of `checkbox` because `label` is not hidden by `popup message`
columns = driver.find_elements_by_xpath('(//mat-nav-list)[2]//mat-checkbox[not(contains(@class, "mat-checkbox-checked"))]//label')
print('len(columns):', len(columns))
for col in columns:
print('click:', col.text.strip())
col.click()
# TODO: click subcategory, select checkboxes, click back button
subcategories = driver.find_elements_by_xpath('(//mat-nav-list)[2]//mat-list-item[.//icon[@key="icon_caret_right"]]')
print('len(subcategories):', len(subcategories))
for sub in subcategories:
sub.click()
subcolumns = driver.find_elements_by_xpath('(//mat-nav-list)[3]//mat-checkbox[not(contains(@class, "mat-checkbox-checked"))]//label')
for subc in subcolumns:
subc.click()
backbutton = driver.find_element_by_xpath('//*[@id="mat-dialog-1"]/column-panel/div/dialog-layout/div/mat-dialog-content/div/div/div[1]/button')
backbutton.click()
driver.find_element_by_xpath('//button[@aria-label="Apply Changes"]').click()
任何帮助表示赞赏!
解决方案
你在错误的时刻使用它。您在每个类别中单击它,但只有在选择子类别时才必须单击它。
我需要不同的ID
——dialog-0
而不是dialog-1
我使用更短的 XPath。
for sub in subcategories:
sub.click()
subcolumns = driver.find_elements_by_xpath('(//mat-nav-list)[3]//mat-checkbox[not(contains(@class, "mat-checkbox-checked"))]//label')
for subc in subcolumns:
subc.click()
if subcategories:
backbutton = driver.find_element_by_xpath('//*[@id="mat-dialog-0"]//mat-dialog-content//button')
backbutton.click()
推荐阅读
- azure - 如果 VM 代理状态未使用 Powershell 准备好,我们可以执行脚本自动重启服务吗?
- unity3d - 如何在瓷砖地图中更改单个瓷砖中的对撞机
- jquery - 将猫头鹰旋转木马更换为滑动滑块
- python - 创建绘图标题时同时使用 LaTeX Notation 和 `.format()`
- sql-server - SQL 消息 7399 和消息 7303
- python - Python - numpy 数组、小数位、浮点数和小数点的平均值
- php - 如何知道 php 文件是否正在运行?
- javascript - 通过 Node.js ws websockets 中的某个通道发送消息
- android - 从 Web 服务更新 SQLite 数据库
- html - 将路由器出口变量传递给父组件