Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Click button by find_element_by_class_name not working python selenium webdriver NOT working

I'm trying to add contacts on LinkedIn using Python and Selenium. I'm attempting to do so by adding the contact suggestions made by LinkedIn in the "Network" tab (https://www.linkedin.com/mynetwork), which has an infinite scroll feature.

Basically I want the script to locate the button "Connect", which is next to each suggested profile, click the button, and then repeat until error whereby the script should scroll down to load more "Connect" buttons to reiterate.

The best way I've found to locate the button element is by find_element_by_class_name() since all the connect buttons have the same class. I've also tried locating the elements using CSS and Xpath, without success.

PROBLEM: The script is able to click the first Connect button, but none after that. I've tried many ideas for implementation (locating by Xpath, CSS, using a list of buttons to click), yet none seem to work. Below is the relevant part of the script.

while True:
    try:
        driver.find_element_by_class_name("mn-person-card__person-btn-ext.button-secondary-medium").click()
        time.sleep(1)
    except:
        pass
        print("trying to scroll")
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(1) 

Any ideas? To me it seems as if the code should work, and as if there is something else which is preventing success. Maybe a bug or similar. Might mention that I'm rather new to all of this, and it's the first script I'm trying to make to manipulate a browser.

I'm using Firefox driver. Full script can be found here: http://pastebin.com/qtdNsRtz

Thanks in advance!

like image 303
thecpaptain Avatar asked Mar 25 '17 20:03

thecpaptain


People also ask

Why can't I click on a button in Selenium?

We can list the most common reasons for click problems as being one of the following: Wrong web element locations. The existence of a web element that obscures the web element that we want to click. The Selenium WebDriver works much faster than the response of the application.

How do you click a button using Selenium in Python?

We can click a button with Selenium webdriver in Python using the click method. First, we have to identify the button to be clicked with the help of any locators like id, name, class, xpath, tagname or css. Then we have to apply the click method on it. A button in html code is represented by button tagname.

Can I use Python to click button on webpage?

We can find the button on the web page by using methods like find_element_by_class_name(), find_element_by_name(), find_element_by_id() etc, then after finding the button/element we can click on it using click() method. This will click on the button and a popup will be shown.


2 Answers

You should use find_elements for finding all elements with same class Try this to get all elements:

elements = driver.find_elements_by_class_name("mn-person-card__person-btn-ext.button-secondary-medium")

then use a for loop to click each of them. For example:

for e in elements:
    e.click()
like image 62
Amit Verma Avatar answered Nov 15 '22 04:11

Amit Verma


The way you are trying to use find_element_by_class_name locator is not correct as this locator doesn't support compound classes within.

You need to use either xpath or cssSelector if class attribute have more then one class name :

driver.find_element_by_xpath("//button[@class='mn-person-card__person-btn-ext button-secondary-medium']").click()
like image 20
NarendraR Avatar answered Nov 15 '22 05:11

NarendraR