我必须选择具有动态“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>
和
<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>
每次重新加载页面时,“id”和“name”选择器都会动态更改。每次重新加载时xpath也会发生变化,因为包含对'id'标签的引用(例如'// * [@ id =“6c5c8088fb474f2b93e1de9fb1b1771d”]')。正如您所看到的,这两个元素共享相同的css选择器,这使问题更加复杂......
此时的问题是如何单独选择它们以便我可以使用send_keys()与每个文本区域进行交互?
答案 0 :(得分:1)
这是一个时间问题,在使用find_element
时添加implicit wait以等待元素存在。您需要在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')
答案 1 :(得分:0)
如果您要求在<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>
假设您要在2nd textarea下输入一些文本,然后使用xpath:
//td[2]/textarea[@class='auto-size-field']
另一种方法是根据唯一的父元素
找到元素e.g。
//div[@id='divid']/table/tr/td[2]/textarea[@class='auto-size-field']