单击每次更改其 id 的按钮
Click on button which changes its id everytime
我使用 Python 和 Selenium。
任务是单击带有 text '+like' 或列 'td'[=37= 的按钮] 与 class='profile-image'。
但是按钮没有id,它的class 'more-likes'用于其他按钮。 div 与 class 'profile-image-button' 的情况相同( div 的 class id 已被他人使用 'divs')。
我试图获取 'td' 的 id :
button = photos.find('td', class_='profile-image')
print(button.get_id)
输出为'None'
这里是html网页代码:
<div id="category7515692" class="category-content" data-content="present" data-collapsing="true">
<table class="pictures" data-columns-count="12" data-type="gallery">
<tbody class="" data-selec="7565904" data-name="beauty" data-live="true">
<tr data-mutable-id="MR1main" class="header">
<td class="main-row-buttons" rowspan="1" data-mutable-id="Bmain">
<table>
<tbody>
<tr>
<td class="profile-image" id="view-75634" data-event-more-view="event-more-view" data-selec="7565904" islive="true" isseparatedbutton="false">
<div class="profile-image-button">
<span class="more-likes">+like</span>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
如何点击按钮或获取id?
假设只有一个带有文本“+like”的按钮,您可以像这样搜索带有特定文本的元素:
driver.find_element_by_xpath("//*[contains(text(), '+like')]").click()
所需的元素是 React 元素,因此要单击该元素,您必须诱导 WebDriverWait 才能使 元素可单击,您可以使用以下任一解决方案:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.profile-image>div.profile-image-button>span.more-likes"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='profile-image']//span[@class='more-likes' and contains(.,'+like')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我使用 Python 和 Selenium。 任务是单击带有 text '+like' 或列 'td'[=37= 的按钮] 与 class='profile-image'。 但是按钮没有id,它的class 'more-likes'用于其他按钮。 div 与 class 'profile-image-button' 的情况相同( div 的 class id 已被他人使用 'divs')。 我试图获取 'td' 的 id :
button = photos.find('td', class_='profile-image')
print(button.get_id)
输出为'None'
这里是html网页代码:
<div id="category7515692" class="category-content" data-content="present" data-collapsing="true">
<table class="pictures" data-columns-count="12" data-type="gallery">
<tbody class="" data-selec="7565904" data-name="beauty" data-live="true">
<tr data-mutable-id="MR1main" class="header">
<td class="main-row-buttons" rowspan="1" data-mutable-id="Bmain">
<table>
<tbody>
<tr>
<td class="profile-image" id="view-75634" data-event-more-view="event-more-view" data-selec="7565904" islive="true" isseparatedbutton="false">
<div class="profile-image-button">
<span class="more-likes">+like</span>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
如何点击按钮或获取id?
假设只有一个带有文本“+like”的按钮,您可以像这样搜索带有特定文本的元素:
driver.find_element_by_xpath("//*[contains(text(), '+like')]").click()
所需的元素是 React 元素,因此要单击该元素,您必须诱导 WebDriverWait 才能使 元素可单击,您可以使用以下任一解决方案:
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.profile-image>div.profile-image-button>span.more-likes"))).click()
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='profile-image']//span[@class='more-likes' and contains(.,'+like')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC