使用硒尝试了两种方法,对我不起作用。
bot.find_element_by_css_selector('[data-testid="like"]').click()
bot.find_element_by_xpath("//a[@aria-label = 'Like']/*[name()='svg']").click()
bot.find_element_by_xpath("//a[@role = 'button']").click()
//编辑// 我试图点击此推文中的“赞”按钮!
https://twitter.com/RichardEudes/status/1196798030529335296
我的代码如下
# link is the url above
for link in stored_links:
bot.get(link)
bot.find_element_by_xpath("//div[@aria-label='Like']/div/div").click()
time.sleep(10)
答案 0 :(得分:0)
我也会在您的代码示例中添加一个WebDriverWait
:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# link is the url above
for link in stored_links:
bot.get(link)
like_button = WebDriverWait(bot, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@aria-label='Like']/div/div")))
like_button.click()
time.sleep(10)
我使用上面的代码成功单击了所提供推文上的“赞”按钮。
分解此代码示例:
顶部的 from
语句-这些语句用于包含我们需要的所有Selenium库。 By
用于定位符,这里特别是By.XPATH
。 WebDriverWait
和expected_conditions
都用于显式等待,在这里我们等待点赞按钮可见,然后单击它。
WebDriverWait(bot, 10)
声明显式等待的新实例,特别是超时为10秒-意味着,如果在10秒内不满足条件,则此方法将失败。
EC.presence_of_element_located
是我们正在等待的条件-在这种情况下,我们正在等待某个元素的存在。 By.XPATH, "//div...div"
指定我们正在等待的元素。
第like_button = WebDriverWait(bot, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@aria-label='Like']/div/div")))
行正在等待通过//div[@aria-label='Like']/div/div
定位的元素的存在。如果在10秒钟内未找到该元素,则会抛出TimeoutException
。
最后,WebDriverWait
返回等待后找到的WebElement,因此like_button
是我们等待存在的WebElement对象。这样便可以通过like_button.click()
单击按钮,因为我们使用的是对上一步WebDriverWait
步骤中存储的WebElement的引用。