使用 selenium python web 驱动程序从角度单击表中的所有行
Posted
技术标签:
【中文标题】使用 selenium python web 驱动程序从角度单击表中的所有行【英文标题】:clicking through all rows in a table from angular using selenium python web driver 【发布时间】:2019-08-29 21:31:44 【问题描述】:我正在尝试遍历 html 页面的表格/网格上的某一列行,我假设它是一个动态角度元素。
我试图通过在每行之间创建一个公共 xpath 列表来遍历这些行。这只能帮助我实现 32 行,而不是 332 行的全部数量。我还尝试等待查看网页是否会加载然后拥有全部数量的网络元素。然后我尝试通过向下滚动到列表中的最后一个元素来运行一个循环来搜索类似的 xpath。这些方法都没有帮助我遍历行。此外,由于该网站是私有的,因此我将无法共享该网站。
蟒蛇
webelement = []
driver.implicitly_wait(20)
ranSleep()
for webelement in driver.find_elements_by_xpath('//a[@class="ng-pristine ng-untouched ng-valid ng-binding ng-scope ng-not-empty"]'):
driver.implicitly_wait(20)
行的html
<a ng-model="row.entity.siteCode"
ng-click="grid.appScope.openSite(row.entity)"
style="cursor:pointer"
class="ng-pristine ng-untouched ng-valid ng-binding ng-scope ng-not-empty">
Albuquerque
<span title="Open defect(s) on site"
ng-show="row.entity.openDeficiencies"
style="background-color:yellow; color:#000;"
class="ng-hide">
!
</span>
</a>
一旦这个问题解决,我希望能够点击每一行中的所有链接
这里是html代码的sn-p
<div id="table1" class="container-fluid">
<div ui-i18n="en"
class="grid advanceSearch ui-grid ng-isolate-scope grid1554731599680"
id="grid1" ui-grid="gridOptions"
ui-grid-expandable="" ui-grid-rowedit=""
ui-grid-resize-columns="" ui-grid-selection=""
ui-grid-edit="" ui-grid-move-columns="">
<!-- TODO (c0bra): add "scoped" attr here, eventually? -->
<style ui-grid-style="" class="ng-binding">
.grid1554731599680
/* Styles for the grid */
here is how the page looks with the table format
Here is the rows that I want to click through all of them
【问题讨论】:
AngularJSng-model
指令不适用于 <a>
锚元素。
那我该怎么做呢?我是网络抓取的新手
【参考方案1】:
您仍然可以通过附加到类名来增加每个链接,因为它们在本质上似乎有点独特,并且使用最后一个数字作为字母表中的字符。也许像下面这样的东西可以工作:) 扩展类名的最后一个字符,以防增加,应该解决超过 26 个的问题。
采取的步骤:增加类名>将成功添加到列表>移动到列表中的链接>单击链接>列表项
import string
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
alpha = string.ascii_uppercase
successfulIncs = []
for char in alpha:
className = 'ng-pristine.ng-scope.ui-grid-coluiGrid-000' + char
try:
driver.find_elements_by_class_name(className)
successfullIncs.append(className)
except NoSuchElementException:
print("Element not found")
### First move to our element
for line in successfulIncs:
link = WebDriverWait(driver, 3).until(EC.visibility_of_element_located
(By.CLASS_NAME, line))
ActionChains(driver).move_to_element(link).perform()
#Click
ActionChains(driver).move_to_element(link).click(link).perform()
【讨论】:
程序确实适用于蜂窝站点最终会更改名称是否有另一种方法 如果你找到了类名“ng-pristine.ng-untouched.ng-valid ng-binding.ng-scope.ng-not-empty”的所有元素,你会得到什么样的输出? :) 我只得到前 32 个链接 您认为我可以使用带有角度的表格的东西吗? 这是封闭源代码,所以我很难说,所以我得问几个问题 :) 对于确实出现的 32 个链接,你能确定多少是还失踪?当您向上或向下导航时,表格是否会被填充?以上是关于使用 selenium python web 驱动程序从角度单击表中的所有行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 selenium Web 驱动程序 python 在 html 中的标签之间添加标签
使用 selenium python web 驱动程序从角度单击表中的所有行
Selenium Web 驱动程序 Firefox 打开空白页