当前位置: 首页 > 知识库问答 >
问题:

如何使用Selenium通过列表中的关键字在页面上查找元素?

穆德海
2023-03-14
contact = ['telephone', 'cellphone', 'phone']

q = driver.find_element_by_xpath("//*[contains(@name, 'phone')]")

那么,问题是如何通过使用关键字列表在某些站点的联系人页面上动态地找到所有的文本字段和提交按钮?

共有1个答案

秦博达
2023-03-14

正如在注释中所说的那样,通过使用“or”链接xpath查询,可以很容易地完成此操作,其中一种方法是:

# I use lxml to demo the xpath, which should be the same as in selenium
In [7]: from lxml import html

# just a sample
In [8]: s = """<div id="contact-area"> 
   ...:            <form method="post" action="contactengine.php">
   ...:                <label for="Name">Name:</label>
   ...:                <input type="text" name="Name" id="Name" />
   ...:                <label for="City">City:</label>
   ...:                <input type="text" name="City" id="City" />  
   ...:                <label for="Email">Email:</label>
   ...:                <input type="text" name="Email" id="Email" />
   ...:                <label for="Message">Message:</label><br />
   ...:                <textarea name="Message" rows="20" cols="20" id="Message"></textarea>
   ...:                <input type="submit" name="submit" value="Submit" class="submit-button" />
   ...:            </form>
   ...:        <div style="clear: both;"></div>
   ...:    </div>"""

In [9]: tree = html.fromstring(s)

In [10]: contact = ["Name", "Phone", "Message", "Comment"] 

# construct the query with "or" chaining with all keywords 
In [11]: query = " or ".join("contains(@name, '%s')" % field for field in contact)

In [12]: query
Out[12]: "contains(@name, 'Name') or contains(@name, 'Phone') or contains(@name, 'Message') or contains(@name, 'Comment')"

结果:

In [13]: tree.xpath("//*[%s]" % query)
Out[13]: 
[<InputElement 10e34c8e8 name='Name' type='text'>,
 <TextareaElement 10e34c9f0 name='Message'>]

希望这有帮助。

 类似资料:
  • 问题内容: 我希望能够在表的所有列中动态查找特定的关键字。该脚本的目的是仅需更改关键字和表名,而无需知道表的所有列是什么。 这意味着以下代码不是令人满意的解决方案: […]输入“关键字”(字段1,字段2,字段3,字段4,…)[…] 我能够使用子查询动态检索表的所有列名。但是然后,该子查询中的IN语句返回空结果。 然后,我创建了一个新的子查询,该子查询以逗号分隔的列表格式返回列的列表。但是结果也是空

  • 我有一张地图清单

  • 问题内容: 我正在尝试查找具有动态生成ID的元素。字符串的最后一部分是常量(“ ReportViewer_fixedTable”),因此我可以使用它来定位元素。我试图在XPath中使用正则表达式: 并通过CssSelector定位: 都不行。任何建议,将不胜感激。 问题答案: 那是因为需要修改css选择器,而您几乎就在那里… 从https://saucelabs.com/blog/selenium

  • 问题内容: 工作代码1: 工作代码2: 问题答案: 初始选择器的问题是缺少选择器的前面。在告诉XPath来搜索整个HTML树。 这应该可以解决问题: 如果要查找元素的子代,请改用,例如 如果要查找包含 文本 而不是href属性的链接,则可以使用

  • 问题内容: 给定这个清单 我想根据字典值更改其和值: 因此列表变为: 问题答案: 如果所有值都是唯一的,那么您应该首先撤销dict以获得有效的解决方案: 如果您仅尝试更新所选索引,请尝试:

  • 问题内容: 如何使用Selenium检查当前页面上是否存在给定的文本字符串? 问题答案: 代码是这样的: