Home > database >  Why is selenium not able to find element with ID, even when it is not in an iframe?
Why is selenium not able to find element with ID, even when it is not in an iframe?

Time:01-02

I am trying to make an automatic program for logging in to GitHub. I could find only the sign-in option. After that, I could not find the Username field. I have confirmed that the element is definitely not in a/an (i)frame. I have tried an alternative with css-selector.

Here is the code I tried:

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

chrome_opt = Options()
chrome_opt.add_experimental_option("detach", True)  # type: ignore[unknown]

auto = Chrome(options=chrome_opt)
auto.get("https://github.com")

signin_link = auto.find_element("link text", "Sign in")
signin_link.click()

username = auto.find_element("id", "login_field")
username.send_keys("ArnabRollin")  # type: ignore[unknown]

# FIXME

The type-ignore comments are there because of 'strict mode' type checking in VS Code. Also, after 5 tries of running it, it finally worked, but when I ran it again it didn't.

CodePudding user response:

Note, I'm not sure it's ethical scraping this website, and besides, they have Captcha.

You can use this CSS selector:

username = auto.find_element(By.CSS_SELECTOR, "input.js-login-field")

Additionally, when you go to github.com and click on login, the URL changes to /login: https://github.com/login

CodePudding user response:

now your code is looking for elements in the page https://github.com - the one used in method get()

instead of clicking element's link, get it with webdriver:

signin_link = auto.find_element("link text", "Sign in")
signin_link.click()

use

signin_link = auto.find_element("link text", "Sign in").get_attribute('href')
auto.get(signin_link)

auto.get(url2) will save new page context into driver. after sign in is complete, a new page context will be needed

  • Related