Search code examples
seleniumxpathtwitter

Locate Tweet 'like' button using xPath (Selenium, Python)


I am trying to locate a tweet like button using xPath.

If I go to https://twitter.com/BillGates and use Chrome developer tools, I can see:

  • That the like button for the first tweet is located at:

/html/body/div[2]/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div/div[2]/section/div/div/div[1]/div/div/div/div/article/div/div[2]/div[2]/div[2]/div[3]/div[3]/div/div/div[1]/svg/g/path

  • That the first tweet like button has:

    < path d="M12 [lots of numbers]">

I tried to use both Python + Selenium and XPath Helper Chrome extension but with both approaches I cannot find the button.

I have tried without success using the full xPath and also the query below:

.find_element_by_xpath("//path[starts-with(@d, 'M')]").click()  

Actually, I cannot get anything past the last div. //svg, //g and //path all get zero results. //div on the other hand, gets me 900+ results...

Appreciate if anyone can help to point me in the right direction.

Thanks!


Solution

  • I highly recommend not using Twitter to practice automation. Anyways, i've seen that the likes buttons has data-testid attribute which it's value is unique to that element you are looking for, so we can easily get all the likes buttons elements like this:

    //div[@data-testid="like"]
    

    Or with css selector like this:

    div[data-testid="like"]
    

    Assuming you are writing in Python, Then we can use find_elements method to get all the elements in a list.

    like_buttons = driver.find_elements_by_xpath("//div[@data-testid="like"]")  
    

    And easily click any tweet's like button you'd by index,

    like_buttons[0].click()  # 0 Is the first tweet, 1 is the 2nd etc...
    

    Note that you might need to perform a hover on this element and then click it, So if the driver find the element, but it's not clickable, it must be it.