python - Python/Selenium - 迭代到下一行
问题描述
我的代码进入了一个网站,并且有一个表格,其中每一行都有一个 javascript 窗口,当您单击它时会弹出该窗口
我希望我的代码迭代并单击每一行,这将提示打开第二个窗口,执行一些操作,然后关闭此窗口并移至下一行。
但是,当我关闭第一个窗口时,我的代码会循环,它会再次单击第一行。永远不要移动到第 2 行。
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import time
import requests
driver = webdriver.Chrome()
vals=[]
finalz=[]
productlink=[]
driver.get('https://aaaai.planion.com/Web.User/SearchSessions?ACCOUNT=AAAAI&CONF=AM2021&USERPID=PUBLIC&ssoOverride=OFF')
time.sleep(3)
page_source = driver.page_source
soup = BeautifulSoup(page_source,'html.parser')
productlist=soup.find_all('tr',class_='clickdiv')
for item in productlist:
ea = item.find_all('td')
title=ea[0].text
sam=driver.find_element_by_class_name('clickdiv') #opens the window
sam.click()
time.sleep(1)
cl=driver.find_element_by_class_name('XX') #this is the close window button
cl.click()
解决方案
当您编写代码时,sam=driver.find_element_by_class_name('clickdiv')
将始终找到第一行。驱动程序位于带有表格的页面上,并且正在该页面上搜索具有“clickdiv”类的第一个元素,因为您使用find_element_by_class_name()
的是find_elements_by_class_name()
. 所以,它只是找到第一个具有“clickdiv”类的东西,它是表格的第一行。
您应该使用 Selenium 驱动程序找到所有这些元素,然后遍历这些行并单击它们,而不是使用 BeautifulSoup 来识别要迭代的所有行。
productlist = driver.find_elements_by_class_name('clickdiv')
for item in productlist:
title = item.find_element_by_css_selector("td").text
item.click()
time.sleep(1)
driver.find_element_by_class_name('XX').click() #close window
推荐阅读
- macos - OSX:Chrome 无法连接到 .localhost-domains。拒绝连接
- python - 如何在 python 中通过请求获取代理?
- flutter - 意外的空值颤振
- python-3.x - python中按模块搜索路径顺序输入路径是什么意思?
- angular - Angular Material DateRangePicker 更改左上角日期格式
- php - 在 RouteCollection 中使用实体管理器
- css - mPDF -和操纵失败
- gherkin - 黄瓜 - 重复步骤
- c# - 解析 TSQL 选择查询并返回列表达式
- html - CSS 媒体查询,防止 div 内容在小屏幕上溢出