how to click on this button using selenium python - python

<button id="upload-resume" type="button" class="btn btn-primary btn-lg btn-block ng-binding" ng-show="canUpload()" ng-click="submit()" ng-disabled="submitButtonDisabled" tabindex="0" aria-hidden="false" aria-disabled="false">Continue</button>
how to click on this button using selenium python

try this code :
upload_button = driver.find_element_by_id("upload-resume")
upload_button.click()
If you wanna use Xpath , then you can use this code:
upload_button = driver.find_element_by_xpath("//input[text()='Continue']")
upload_button.click()

Related

How to click the close button within a modal window through Python Selenium

Cannot click close button class="close whitebutton"
<button type="button" class="close whitebutton" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
Trying class_name as below, and it doesn't work, don't know why?:
driver.find_element(By.CLASS_NAME, "whitebutton").click()

Getting attribute from button

The problem here is i have a "show more" with infinite scroll, i need to detect when the button opacity becomes 0, or in other words when the button becomes not visible so i can use pagination until the button becomes invisible, which means there's no more info to scrape, i'm talking about over 200 pages to scrape, and no other way to know how many pages are there and use range to iterate the pages, so i need to get the trigger of the opacity attribute. Since the button is always there i can't just use is not None to find the last page.
The button is like this when there are more pages:
<a class="btn btn-primary btn-lg MaisArtigos">SHOW MORE</a>
it turns to this on the last page
<a class="btn btn-primary btn-lg MaisArtigos" style="opacity: 0;">SHOW MORE</a>
I need to trigger when the style attribute is present
I'm using BeautifulSoup and requests library
you can use the Element.getAttribute()
const div1 = document.getElementById('div1');
const exampleAttr= div1.getAttribute('style');
console.log("the attribute is: " + exampleAttr)
<div id="div1" style="opacity:0;">Hi Champ!</div>
well you may want to add an event listener with "scroll" to trigger the get attribute, also if the element has no "style" attribute it will return a NULL, exampleAttr = NULL;
Getting the attribute you can use the css selector:
soup.select_one('a.MaisArtigos[style="opacity: 0;"]')
Checking if the style is set you can use bool() that will give you True if exists and False while not existing:
bool(soup.select_one('a.MaisArtigos[style="opacity: 0;"]'))
Example
To demonstrate, this will only select the styled <a>.
from bs4 import BeautifulSoup
html='''
<a class="btn btn-primary btn-lg MaisArtigos" style="opacity: 0;">SHOW MORE</a>
<a class="btn btn-primary btn-lg MaisArtigos" style="opacity: 100;">SHOW MORE</a>
<a class="btn btn-primary btn-lg MaisArtigos" >SHOW MORE</a>
'''
soup=BeautifulSoup(html,'lxml')
soup.select('a.MaisArtigos[style="opacity: 0;"]')

How to find this button in selenium webdriver python?

how to find this button this is code, xpath doesn't work:
<button type="submit" data-module="tooltip" data-tooltip-config="addtocart" data-tooltip-content="#tooltip_addtocart" class="btn btn-orange-normal-plp addToCartClick product-tile__add-to-cart-CTA js--add-to-cart tooltipstered">
<span class="product-tile__add-to-cart-icon icon-cart-white"></span>
</button>
tnx
the relative Xpath to the button you want is:
//button[#type='submit']

Selecting button without ID in selenium Python

I'm learning with Python Selenium and I'm trying to click a button which doesn't seem to have an id. I get an error that the element could not be scrolled into view.
Could anyone help with how I click the element?
It might be useful to know that the button only appears when you mouse over a section of the page
HTML is:
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="grey-bg btn btn-default btn-expand" title="Expand"></button>
<button type="button" class="grey-bg btn btn-default btn-export" title="Export"></button>
<button type="button" class="grey-bg btn btn-default btn-clone" title="Clone"></button>
<button type="button" class="grey-bg btn btn-default btn-stamp" title="Pin"></button>
<button type="button" class="grey-bg btn btn-default btn-delete" title="Delete"></button>
</div>
I've tried to select by xpath:
driver.find_element_by_xpath('//*[#title="Export"]').click()
Thanks!
As you mentioned, it appears when you mouse hover. Kindly refer to this discussion for mouse hover. And try to look for the button after then click using javascript as this doesn't need to be displayed in order to click.
exportBtn = driver.find_element_by_xpath('//*[#title="Export"]') driver.execute_script("arguments[0].click();", exportBtn)
From the error, it looks like the element hasn't been scrolled into view. In order to scroll to the element, just add this line to ur code:
element = driver.find_element_by_xpath('//*[#title="Export"]')
driver.execute_script("arguments[0].scrollIntoView();", element)
element.click()
Hope that this helps!

How to find and click the button by "onclick" with Selenium and Python?

There are 2 buttons in a page, and the difference between these 2 buttons is "onclick".
<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('security_div0')">OK</button>
<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('wlan1security_div0')">OK</button>
I was thinking to use xpath:
driver.find_element_by_xpath("//form[#id='update-container-id']/div/div/div/div[2]/div/div[2]/table[1]/tbody/tr[1]/td[8]/div[3]/div/div/div/div[3]/button").click()
But it responses the error as below:
selenium.common.exceptions.ElementNotInteractableException: Message: Element <button id="YesBtn" class="btn btn-primary" type="button"> could not be scrolled into view
Does anyone can help me to click the 2nd button correctly? Thanks a lot.
try with the x-path //button[#onclick="check_security('wlan1security_div0')"]
driver.find_element_by_xpath("//button[#onclick=\"check_security('wlan1security_div0')\"]").click()
Using Action class,
button = driver.find_element_by_xpath("//button[#onclick=\"check_security('wlan1security_div0')\"]")
ActionChains(driver).move_to_element(button).click(button).perform()
using java script executor,
driver.execute_script("javascript:check_security('wlan1security_div0')")
As per the HTML you have provided, to click on the button using the onclick() event you can use the following solution:
First Element(css_selector):
driver.find_element_by_css_selector("button.btn.btn-primary#YesBtn[onclick*='security_div0']").click()
First Element(xpath):
driver.find_element_by_xpath("//button[#class='btn btn-primary' and #id='YesBtn'][#onclick=\"check_security('security_div0')\"]").click()
Second Element(css_selector):
driver.find_element_by_css_selector("button.btn.btn-primary#YesBtn[onclick*='wlan1security_div0']").click()
Second Element(xpath):
driver.find_element_by_xpath("//button[#class='btn btn-primary' and #id='YesBtn'][#onclick=\"check_security('wlan1security_div0')\"]").click()
First and foremost, you are using a really long xpath which will be difficult to maintain. You can narrow it down further.
Now, some xpaths you can try:
1) Get the second button with the id YesBtn (assuming there are only two buttons with that attribute) :
driver.find_element_by_xpath("(//button[#id= 'YesBtn'])[2]");
2) Find by the onclick attribute:
driver.find_element_by_xpath("//button[#onclick= \'check_security(\'wlan1security_div0\')\']");
button1 with HTML :
<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('security_div0')">OK</button>
XPATH :
//button[text()='OK' and #onclick="check_security('security_div0')"]
button2 with HTML :
<button class="btn btn-primary" style="width: 96px;" type="button" id="YesBtn" onclick="check_security('wlan1security_div0')">OK</button>
HTML:
//button[text()='OK' and #onclick="check_security('wlan1security_div0')"]
try:
buttonVar = browser.find_element_by_css_selector(cssSel)
ActionChains(browser).move_to_element(buttonVar).click(buttonVar ).perform()
except Exception as ex:
print("button not found)
Firefox gives you several option you can use with selenium find_element or elements;
by pressing f12 to bring up the inspector,
use the "pick an item" icon in the left corner to select the item you want to view.
This will highlight the text for that item in the inspector, which you can then right click on to bring up a menu where you select "copy" where there are at least 2 find_element options, css_selecor & xpath.
I personally don't like xpath.
They are sometimes long & unruly to work with but whatever suits your style. In my case css_selector works fine.

Categories