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

2024-04-30 03:48:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一些网站的联系人页面中插入数据,但是它们有不同的html结构。所以在第一页我有3个字段(姓名、电话、消息),在第二页我有3个字段(名字、电话、评论)。在

所以我需要使用Python/Selenium使用regexp查找这些字段(输入/文本区域)。在

主要思想是用关键字(名字,名字,你的名字,名字等等)建立一些列表,然后试着用这些关键字来查找文本字段(例如:name=“name”)。在

现在我写下:

contact = ['telephone', 'cellphone', 'phone']

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

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


Tags: 数据name文本消息列表网站html联系人
1条回答
网友
1楼 · 发布于 2024-04-30 03:48:00

正如在评论中所说的,通过用“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')"

结果:

^{pr2}$

希望这有帮助。在

编辑

由于在页面加载时您的元素在某种程度上是不可见的(无论是通过css还是JavaScript),请参考我在这个SO中的另一个答案来执行JavaScript来“启用”这些元素的可见性。在

我在这里不作详细解释,因为这应该属于另一个问题。在

相关问题 更多 >