简体   繁体   中英

Selenium web driver: How do I click on the button?

<button style="margin: 8px 5px 0 0; height: 40px;" 
class="gprospect_linkedin_button gprospect_linkedin_button_style_medium"> 
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUM5NDk2ODA2NjYzMTFFOEIxMDBFQzUxNzIzRTMwQTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUM5NDk2ODE2NjYzMTFFOEIxMDBFQzUxNzIzRTMwQTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFQzk0OTY3RTY2NjMxMUU4QjEwMEVDNTE3MjNFMzBBMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFQzk0OTY3RjY2NjMxMUU4QjEwMEVDNTE3MjNFMzBBMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgdDInEAAAmaSURBVHja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">Get email
</button>

Tried the code below but element cannot be found:

driver.find_element_by_class_name('gprospect_linkedin_button').click()

The actual class name is 'gprospect_linkedin_button gprospect_linkedin_button_style_medium'

find_element_by_class_name function is designed to get the element by the full class-name.

You can try to locate it with xpath like this:

//button[contains(@class, 'gprospect_linkedin_button')];

You can use xpath starts-with function to solve this issue. like:

//*[starts-with(., 'gprospect_linkedin_button')]

As per the configuration details (within your comment update) ...

(Session info: chrome=69.0.3497.100) 
(Driver info: chromedriver=2.37.543627 (63642262d9fb93fb4ab52398be4286d844092a5e),platform=Windows NT 6.3.9600 x86_64) 

Your main issue is the incompatibility between the version of the binaries you are using as follows:

  • You are using chromedriver=2.37
  • Release Notes of chromedriver=2.37 clearly mentions the following :

Supports Chrome v64-66

  • You are using chrome=69.0
  • Release Notes of ChromeDriver v2.42 clearly mentions the following :

Supports Chrome v68-70

So there is a clear mismatch between ChromeDriver v2.37 and the Chrome Browser v69.0

Solution

  • Upgrade ChromeDriver to current ChromeDriver v2.42 level.
  • Keep Chrome version between Chrome v68-70 levels. ( as per ChromeDriver v2.42 release notes )
  • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
  • If your base Web Client version is too old, then uninstall it through Revo Uninstaller and install a recent GA and released version of Web Client .
  • Use the following line of code to invoke click() on the desired element:

     driver.find_element_by_xpath("//button[@class='gprospect_linkedin_button gprospect_linkedin_button_style_medium'][normalize-space()='Get email']").click() 
  • Execute your @Test .


Update A

As you are still seeing NoSuchElementException after the binary update you need to induce WebDriverWait for the desired element to be clickable as follows:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# other lines of code
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='gprospect_linkedin_button gprospect_linkedin_button_style_medium'][normalize-space()='Get email']"))).click()

Update B

As you are still unable to click() you need to use execute_script() method as follows:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# other lines of code
myElement = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='gprospect_linkedin_button gprospect_linkedin_button_style_medium'][normalize-space()='Get email']")))
driver.execute_script("arguments[0].click();", myElement)

尝试这个:

driver.find_element_by_xpath("//*[contains(local-name(), 'button') and contains(@class, 'gprospect_linkedin_button')]").click()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM