Python Selenium--Locate a Div ID - python

I have to click on an image of a dropdown arrow in order to select an item that will populate the input box.Both of them are refered into the dev id:decision. I need your help in order to make my python code to click the image of the arrow and to select a decision. YOu can see in the images what the event of clicking the arrow make.
At least i was looking for a solution to input the text in the input box, but i can't locate properly the input box. I tried with class or xpath and still i can't locate it.
The input class of the input box is pdl_control, but when i used that i got the text populated into another input box in the form.
----Later Edit. The input is not working properly. I have to select the elements from the dropdown list :( If you can help me, I would owe you a lot.
Thank you in advance!!!
1
2

Giving the answer to this question is not that straightforward.
You have only provided the HTML where there are two input boxes and one anchor tag which has an image as the hyperlink.
The href provides the link destination. In your HTML it is set to "#", that means on clicking the image, the event will be occurring on the same page.
The anchor tag has the on click event handler:
"return MultiSelectPDL_TogglePDL(event)"
The information which you have provided is not sufficient. You have to provide the complete HTML so that I can help you with this question.

Related

how to select div class by find_element_by_xpath?

I'm making instagram like bot, but I can not find the element for the post in #tag page.
enter image description here
Red circle is what I want to click it, and the inspected element is
enter image description here
my code is
e = driver.find_element_by_xpath('/html/body/div[1]/section/main/article/div[2]/div/div[1]/div[1]/a/div/div[2]')
e.click()
but it didn't work. how do I select this element?
Ok, first, you need to know that, the inspection you're doing on your chrome is not going to be the same when running a new instance of your program due to generated css class, so that can be the first problem !
The second problem is that, it's possible you just got blocked by instagram because you're it detected that you're not a 'real' browser.
There can be many reasons !
So first, make sure you can get the whole html and it has the same structure as the one you're trying to fetch/scrap !

Clicking multiple <span> elements with Selenium Python

I'm new to using Selenium, and I am having trouble figuring out how to click through all iterations of a specific element. To clarify, I can't even get it to click through one as it's a dropdown but is defined as an element.
I am trying to scrape fanduel; when clicking on a specific game you are presented with a bunch of main title bets and in order to get the information I need to click the dropdowns to get to that information. There is also another drop down that states, "See More" which is a similar problem, but assuming this gets fixed I'm assuming I will be able to figure that out.
So far, I have tried to use:
find_element_by_class_name()
find_element_by_css_selector()
I have also used them in the sense of elements, and tried to loop through and click on each index of the list, but that did not work.
If there are any ideas, they would be much appreciated.
FYI: I am using beautiful soup to scrape the website for the information, I figured Selenium would be helpful making the information that isn't currently accessible, accessible.
This image shows the dropdowns that I am trying to access, in this case the dropdown 'Win Margin'. The HTML code is shown to the left of it.
This also shows that there are multiple dropdowns, varying in amount based off the game.
You can also try using action chains from selenium
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav # submenu1")
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
Source: here

Python Selenuim, finding a button with a specific attribute without XPATH

I am writing a script in Python using selenium that automates a store checkout. It launches to the site, finds the first item that matches the criteria, hits checkout, then proceeds top purchase. I am trying to find out how to make it select a specific color. The shop I am buying from updates the store every week with new items, so I won't have the XPATH available to me.
There is a button to change the color, and I need help being able to select the button.
The store has multiple buttons with the product in different colors as a way to choose between them.
The button to change colors has ONE specific attribute titled "data-style-name"="(color)"
I will not have any other attribute, link, or ID known to me, thus searching for this attribute seems like the only way to find it. The picture above is a snippet from pre-existing items on the storepage as an example.
(Note that above it says class="selected" because the "black" jacket has been clicked on while taking this screenshot. Example of a jacket that has not been clicked on:
Anyone have any ideas on the way to go about this?
Inspired by this and this, and a bit of reading up on CSS selectors but something like:
elem = driver.find_element_by_css_selector('button[data-style-name]')
Might work for you

Can't scrape data from webpage with popup/frame

I am having trouble finding elements on a customer-facing webpage that I am scraping data from, using Robot Framework + Selenium. My trouble, I think, has to do with the desired data existing in a popup/frame. The data I seek is located on a customer's invoice, which pops up when I press a button ("View Current Invoice"). I've been successful with logging into the site and navigating around, and at one point I was successful pressing the View Current Invoice button to cause the invoice to pop up - but forgot to commit that code and lost it. :-(
In any case, eve if I manually enter the popped up invoice by pressing the button when my script is expecting it to be pressed, I can't seem to scrape the subsequent data. I have tried to identify elements on the invoice using locators (from Right-Click-Inspect capability built into Firefox and Chrome; Katalaon Recorder; Selenium IDE; etc.). I get what looks like a valid locator (almost always Xpath); yet when I run my Robot script, it fails to find the element in question. I have spent a lot of time poring over the page's source code, but since I am not as savvy with HTML/JS/CSS as I should be, I haven't been successful.
Here is a screenshot of the invoice button:
And here is what I see when the button is pressed. I want to scrape all the invoice data, like Amount Due, Invoice Number, Due Date, etc.
Does anyone have any idea what I am missing here? What would you do to get the data on the invoice if you were in my shoes? I know my question probably sounds vague and naiive, but I am at the end of my rope, so to speak. I am willing to share page source code, more screenshots, whatever is required.
EDIT I used Rahul Rai's method to inspect the popup while it was popped up; then searched for "iframe". There were 10 matches; #7, when clicked on, resulted in the invoice popup being highlighted in blue:
I assume this means this is the iframe referencing the popup? If so, I should be able to find information about the "handle" to the iframe in the inspection code, but I don't see anything there that matches the locators I am used to (e.g. name, id, xpath). I even tried "Select Frame 1599252503952", but that just resulted in a
"Element with locator '1599252503952' not found" error.
As per above screen you have shared I can see your Invoice details are inside iframe. So after clicking on View Current Invoice button you can use below code to navigate inside frame and then scrape required information.
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(#src,'invoice_detail_container']")))
#Code to scrape data
ele = driver.find_element_by_xpath('<xpath>')
print(ele.txt)
......
......
#After your work is done in this frame to navigate back to main window
driver.switch_to.default_content()
Note: I have assumed your main frame for invoice is not in side any other iframe ( Based on screen shared). Also before elements start there is no other nested frame. If there is any other nested frame you need to navigate first into that.
I was finally able to scrape data from the Invoice popup after inspecting the HTML source, and seeing this:
<iframe frameborder="0" src="/cmc/invoice_detail_container.pyt?direction=//my.hughesnet.com/cmc/invoice_detail.pyt%3Finvnumber%1234-567890&portletId=863" name="1599391562960" class="cboxIframe" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe>
I was then able to use the Select Frame keyword in Robot Framework, specifying the iframe locator for the popup, using the 'class' strategy. I also had to explicitly select the main body frame first. In the end, the code that allowed me to enter the iframe and scrape was:
Select Frame body
Select Frame class:cboxIframe
Big thank you to Rahul Rai for pushing me closer to the solution; and thanks to the others who answered as well.
You need to switch your site to frame/popup, you can use like below example, may be it will help you.
IList<IWebElement> textfields = new List<IWebElement>();
textfields = driver.FindElements(By.TagName("iframe"));
driver.SwitchTo().Frame(textfields[count); // number of textfields list.
please try to implement as per your scenario, let me know if any question.
You can try to do :
driver.switch_to_active_element()
and then scrape the popup to close it. Then I think it will be okay...

Can't find the button to click with selenium

Trying to click on the button on "https://euw.op.gg/summoner/userName=JengaSneaky". But I can't find the element that trigger it.
The pic shows one of the buttons. I want Selenium to click on it so I can scrape the data that pops up. I've tried to find the element but it says I can't use it with click().
The problem with these kind of buttons is that they are generated each time you load the html ( or the page ) based on the data contained in a database that changes everyday.
That's why they don't come with a unique id or something to distinguish them from others.
The thing you could do here is to find them by the CSS SELECTOR or by XPATH.
But you will always have to check if they changed everyday.
What you could also try to do is locate them if they contain a specific text.

Categories