硒是否可以单击“赞”按钮(不使用类)? (参考图片)

时间:2019-11-19 16:20:14

标签: python selenium web-scraping

使用硒尝试了两种方法,对我不起作用。

  1. bot.find_element_by_css_selector('[data-testid="like"]').click()

  2. bot.find_element_by_xpath("//a[@aria-label = 'Like']/*[name()='svg']").click()

  3. bot.find_element_by_xpath("//a[@role = 'button']").click()

ss of the inspect segment

//编辑// 我试图点击此推文中的“赞”按钮!

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)

1 个答案:

答案 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.XPATHWebDriverWaitexpected_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的引用。