当前位置: 首页 > 面试题库 >

硒:遍历元素组

窦英武
2023-03-14
问题内容

我已经用BeautifulSoup做到了,但是有点麻烦,我想弄清楚是否可以直接用Selenium做到。

假设我有以下HTML,这些HTML在页面源中使用相同的元素但内容不同重复多次:

<div class="person">
    <div class="title">
        <a href="http://www.url.com/johnsmith/">John Smith</a>
    </div>
    <div class="company">
        <a href="http://www.url.com/company/">SalesForce</a>
    </div>
</div>

我需要建立一个字典,每个人的条目如下:

dict = {'name' : 'John Smith', 'company' : 'SalesForce'}

通过执行以下操作,我可以轻松地让Selenium生成每个顶级元素的内容列表:

driver.find_elements_by_class_name('person')

但是,我无法遍历列表,因为上述方法不会将范围/源范围缩小到该元素的内容。

如果我尝试做这样的事情:

people = driver.find_elements_by_class_name('person')
for person in people:
    print person.find_element_by_xpath['//div[@class="title"]//a').text

我只是一次又一次得到相同的名字。

我需要按组进行此操作,因为在我的情况下,遍历整个页面并逐个附加每个标签将不起作用(存在无限滚动,因此效率真的很低)。

有谁知道是否可以直接在Selenium中执行此操作,如果可以,如何执行?


问题答案:

使用find_elements_by_class_name()让所有块,find_element_by_xpath()以获得titlecompany每个人:

persons = []
for person in driver.find_elements_by_class_name('person'):
    title = person.find_element_by_xpath('.//div[@class="title"]/a').text
    company = person.find_element_by_xpath('.//div[@class="company"]/a').text

    persons.append({'title': title, 'company': company})


 类似资料:
  • 对于元素间的空格,IE9 及之前版本不会返回文本节点,而其他所有浏览器都会返回文本节点。这样,就导致了在使用childNodes 和firstChild 等属性时的行为不一致。为了弥补这一差异,而同时又保持DOM规范不变,Element Traversal 规范(www.w3.org/TR/ElementTraversal/)新定义了一组属性。 Element Traversal API 为DOM

  • 问题内容: 我已经用BeautifulSoup做到了,但是有点麻烦,我想弄清楚是否可以直接用Selenium做到。 假设我有以下HTML,这些HTML在页面源中使用相同的元素但内容不同重复多次: 我需要建立一个字典,每个人的条目如下: 通过执行以下操作,我可以轻松地让Selenium生成每个顶级元素的内容列表: 但是,我无法遍历列表,因为上述方法无法将范围/源范围缩小到该元素的内容。 如果我尝试执

  • 问题内容: 我创建了一种方法来解组xml(item.xml)文件。但是,如果有多个元素,如何遍历所有元素并使它们显示? 我的代码如下: 如果我的xml是 如何获取所有显示的值?谁能帮我? 问题答案: 我在大学的一些项目中使用过JAXB。据我所记得,您应该返回一个对象(例如),然后查询该对象以检索其中包含的元素。 因此,您的xml应该如下所示: 此时,您的 Java 代码将是:

  • 我正在使用XPath/CSS和Selenium来定位网站上的元素。我想创建一个方法,在这个方法中,我遍历一个定位器列表(XPath/CSS),然后程序选择哪个有效。换句话说,它从定位器1开始-如果定位器存在,它将返回true并存在循环。否则,它将移动到列表中的下一个定位器。一旦用完所有CSS定位器,它就会转到XPath等等。 目前,我正在考虑如下实施: 然后,我计划为每种定位器类型调用此方法(一次

  • 问题内容: 我想做一个Java游戏。首先,程序要求玩家的数量。之后,它询问他们的名字。我将他们的名字放在ID和分数中。在游戏结束时,我会计算分数,然后将其放在(特定名称的特定分数)中。有谁知道如何做到这一点?这是我的代码: 玩家: 主要: 有谁知道我最后如何打印,例如: 更新: 我主要是这样做的(正如Jigar Joshi建议的那样) 当我将球员的两个名字“ a”和“ b”放进去时,它会显示“分数

  • 问题内容: 我是一个selenium菜鸟,一直在努力用python完成事情。我试图从此页面迭代所有用户评论(“ partial_entry”类)https://www.tripadvisor.com/Airline_Review-d8729164-Reviews- Cheap-Flights-or560-TAP- Portugal#REVIEWS 即使Im每次都在for循环中选择一个不同的元素,但