Python Selenium动态“id”和“name”

2024-06-28 20:44:28 发布

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

我必须选择具有动态“id”和“name”选择器的元素,每次页面重新加载时都会更改。我也不能使用css选择器,因为我所针对的元素共享公共选择器。下面是我要选择的两个元素的html:

<td colspan="60" width="60%" class="cell-right" valign="top">
  <textarea onkeydown="event.cancelBubble=true;" onkeypress="event.cancelBubble=true;" onkeyup="event.cancelBubble=true;" name="1c2b0730969c468aa06b312d96f1513b" id="1c2b0730969c468aa06b312d96f1513b" class="auto-size-field" rows="5"></textarea>
</td>

以及

^{pr2}$

每次重新加载页面时,“id”和“name”选择器都会动态更改。每次重新加载时,xpath也会发生变化,因为它包含对“id”标记的引用(例如“//*[@id=”6c5c8088fb474f2b93e1de9fb1b1771d“]”)。正如您所见,这两个元素共享相同的css选择器,这使得问题更加复杂。。。在

现在的问题是如何单独选择它们,以便可以使用send_keys()与每个文本区域进行交互?在


Tags: nameeventidtrue元素html选择器动态
2条回答

如果您需要在<td>下选择特定的textarea,那么就使用索引,因为所有的事情看起来都很常见

<td colspan="60" width="60%" class="cell-right" valign="top">
  <textarea onkeydown="event.cancelBubble=true;" onkeypress="event.cancelBubble=true;" onkeyup="event.cancelBubble=true;" name="6c5c8088fb474f2b93e1de9fb1b1771d" id="6c5c8088fb474f2b93e1de9fb1b1771d" class="auto-size-field" rows="5"></textarea>
</td>
<td colspan="60" width="60%" class="cell-right" valign="top">
  <textarea onkeydown="event.cancelBubble=true;" onkeypress="event.cancelBubble=true;" onkeyup="event.cancelBubble=true;" name="6c5c8088fb474f2b93e1de9fb1b1771d" id="6c5c8088fb474f2b93e1de9fb1b1771d" class="auto-size-field" rows="5"></textarea>
</td>
<td colspan="60" width="60%" class="cell-right" valign="top">
  <textarea onkeydown="event.cancelBubble=true;" onkeypress="event.cancelBubble=true;" onkeyup="event.cancelBubble=true;" name="6c5c8088fb474f2b93e1de9fb1b1771d" id="6c5c8088fb474f2b93e1de9fb1b1771d" class="auto-size-field" rows="5"></textarea>
</td>

假设您想在第二个文本区域下输入一些文本,然后使用下面的xpath:

^{pr2}$

另一种方法是根据唯一的父元素定位元素

例如

//div[@id='divid']/table/tr/td[2]/textarea[@class='auto-size-field']

这是一个计时问题,添加implicit wait以等待元素存在,同时使用find_element。您需要在driver初始化后定义一次,它将应用于driver“生命周期”的其余部分

此外,您要查找的搜索栏有id和名称q

from selenium import webdriver

driver = webdriver.Chrome("C:/Users/xxx/xxx/chromedriver/chromedriver.exe")
driver.implicitly_wait(5) # seconds

login_url = "http://www.alluc.ee"
driver.get(login_url)

search_bar = driver.find_element_by_id('q')
# or search_bar = driver.find_element_by_name('q')

相关问题 更多 >