Implicit delay with Selenium - python

I am practicing with selenium. I tried this page scraping with beautifulsoup, but as the page gets some time to load, I tried it with selenium with adding a delay time. I have tried drive.delay and timeout too. But nothing works fine with me. I get same alike error with all the tries, and I have attached my latest try and the error I get with it.
This is my ty:
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
url = 'https://www.checkatrade.com/search?page=1&categoryId=1164&location=London'
driver =webdriver.Chrome(executable_path='D:\Web_Scraping\chromedriver_win32\chromedriver.exe')
driver.get(url)
driver.implicitly_wait(20)
items = driver.find_element_by_class_name('sc-8keyp7-0 kbPUFb sc-1a2v1qv-0 gwBNSh sc-3jeiz1-1 bfuahU')
for item in items:
company = item.find_element_by_xpath('//*[#id="1052063"]/div/div[2]/div[2]/a/div[1]/h2').text
print(company)
But it throws me this error, which I can not figure out.
DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver =webdriver.Chrome(executable_path='D:\Web_Scraping\chromedriver_win32\chromedriver.exe')
DevTools listening on ws://127.0.0.1:1090/devtools/browser/9ed2753e-5d6e-4382-a9ac-a0ed2fbb8379
d:/Web_Scraping/seleniumtest.py:21: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
items = driver.find_element_by_class_name('sc-8keyp7-0 kbPUFb sc-1a2v1qv-0 gwBNSh sc-3jeiz1-1 bfuahU')
[5536:25384:1014/115806.197:ERROR:chrome_browser_main_extra_parts_metrics.cc(228)] crbug.com/1216328: Checking Bluetooth availability started. Please report if there is no report that this ends.
[5536:25384:1014/115806.198:ERROR:chrome_browser_main_extra_parts_metrics.cc(231)] crbug.com/1216328: Checking Bluetooth availability ended.
[5536:25384:1014/115806.199:ERROR:chrome_browser_main_extra_parts_metrics.cc(234)] crbug.com/1216328: Checking default browser status started. Please report if there is no report that this ends.
[5536:23016:1014/115806.200:ERROR:device_event_log_impl.cc(214)] [11:58:06.200] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: A device attached to the system is not functioning. (0x1F)
[5536:25384:1014/115806.733:ERROR:chrome_browser_main_extra_parts_metrics.cc(238)] crbug.com/1216328: Checking default browser status ended.
Traceback (most recent call last):
File "d:/Web_Scraping/seleniumtest.py", line 21, in <module>
items = driver.find_element_by_class_name('sc-8keyp7-0 kbPUFb sc-1a2v1qv-0 gwBNSh sc-3jeiz1-1 bfuahU')
File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 754, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1238, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 418, in execute
self.error_handler.check_response(response)
File "C:\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".sc-8keyp7-0 kbPUFb sc-1a2v1qv-0 gwBNSh sc-3jeiz1-1 bfuahU"}
(Session info: chrome=94.0.4606.81)
Stacktrace:
Backtrace:
Ordinal0 [0x0107BDE3+2473443]
Ordinal0 [0x01016661+2057825]
Ordinal0 [0x00F22438+1057848]
Ordinal0 [0x00F4C7DB+1230811]
Ordinal0 [0x00F76712+1402642]
Ordinal0 [0x00F6571A+1333018]
Ordinal0 [0x00F74ABF+1395391]
Ordinal0 [0x00F655AB+1332651]
Ordinal0 [0x00F42104+1188100]
Ordinal0 [0x00F42F59+1191769]
GetHandleVerifier [0x01202266+1549718]
GetHandleVerifier [0x012AD4A7+2250711]
GetHandleVerifier [0x0110718B+521403]
GetHandleVerifier [0x01106229+517465]
Ordinal0 [0x0101B79D+2078621]
Ordinal0 [0x0101FB58+2095960]
Ordinal0 [0x0101FC92+2096274]
Ordinal0 [0x01029541+2135361]
BaseThreadInitThunk [0x764DFA29+25]
RtlGetAppContainerNamedObjectPath [0x77A77A9E+286]
RtlGetAppContainerNamedObjectPath [0x77A77A6E+238]
What causes this error?

You are using a wrong locator.
find_element_by_class_name method is intended to receive a SINGLE class name while you are passing a multiple class names value to it "find_element_by_class_name".
To pass multiple class names you should use css selector or XPath.
So instead of
items = driver.find_element_by_class_name('sc-8keyp7-0 kbPUFb sc-1a2v1qv-0 gwBNSh sc-3jeiz1-1 bfuahU')
It could be
items = driver.find_element_by_css_selector('.sc-8keyp7-0.kbPUFb.sc-1a2v1qv-0.gwBNSh.sc-3jeiz1-1.bfuahU')
Or
items = driver.find_element_by_xpath("//div[#class='sc-8keyp7-0 kbPUFb sc-1a2v1qv-0 gwBNSh sc-3jeiz1-1 bfuahU']")

Related

Can't use Selenium with for loop

I am trying to write a program with for loop and for that I need to declare Selenium webdriver before the loop.
Each time I am trying to do it I get an error. Like the loop doesn't recognize driver.get part.
Here is the code:
from selenium import webdriver
import time
import csv
with open('smlxl.csv', 'r') as myFile:
myReader = csv.reader(myFile)
myList = list(myReader)
driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\chromedriver.exe')
for n in range(1,1000,4):
barcode = (myList[n][24])
url = ("https://www.google.com/search?q=" + barcode)
driver.get(url)
print(n)
n = (n+4)
time.sleep(3)
driver.close()
The error I get:
C:\Users\DELL\PycharmProjects\pythonProject3\erro.py:10: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\chromedriver.exe')
1
Traceback (most recent call last):
File "C:\Users\DELL\PycharmProjects\pythonProject3\erro.py", line 16, in <module>
driver.get(url)
File "C:\Users\DELL\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 447, in get
self.execute(Command.GET, {'url': url})
File "C:\Users\DELL\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 435, in execute
self.error_handler.check_response(response)
File "C:\Users\DELL\PycharmProjects\pythonProject3\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
Stacktrace:
Backtrace:
Ordinal0 [0x00326463+2188387]
Ordinal0 [0x002BE461+1762401]
Ordinal0 [0x001D3C40+801856]
Ordinal0 [0x001F68BD+944317]
Ordinal0 [0x001F7AD6+948950]
GetHandleVerifier [0x005C71F2+2712546]
GetHandleVerifier [0x005B886D+2652765]
GetHandleVerifier [0x003B002A+520730]
GetHandleVerifier [0x003AEE06+516086]
Ordinal0 [0x002C468B+1787531]
Ordinal0 [0x002C8E88+1805960]
Ordinal0 [0x002C8F75+1806197]
Ordinal0 [0x002D1DF1+1842673]
BaseThreadInitThunk [0x7587FA29+25]
RtlGetAppContainerNamedObjectPath [0x770D7A9E+286]
RtlGetAppContainerNamedObjectPath [0x770D7A6E+238]
Process finished with exit code 1
Thank you for helping
Had to place driver.close() outside the for loop.
These error message...
selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
...implies that the previous session wasn't successfully killed/removed/eliminated.
Solution
You need to replace:
driver.close()
with:
driver.quit()
References
You can find a couple of relevant detailed discussions in:
selenium.common.exceptions.WebDriverException: Message: invalid session id using Selenium with ChromeDriver and Chrome through Python

Script which works on PC1 doesn't work on PC2

a friend of mine wrote me a piece of code which does a web automation for me which im running on a VPS.
On VPS 1 the script has been running for days without a problem.
Now I wanted to do the same on a different VPS.
Its an older windows version of win 10 I don't know if that plays a role*
Chrome version on VPS 1 is 102
If I try to install chrome on VPS 2 it updates automatically to 103 so I tried downloaded version 102 over this link : https://www.slimjet.com/chrome/google-chrome-old-version.php but it still auto updates to 103 so i ended up running the 103 chrome driver instead of the 102 on VPS1
For the rest I installed everything completely the same on VPS 1 on VPS2
Selenium version 4.1.5
But now all it does it that it opens the browser with the link but it doesn't do any actions and I don't know what the error means.
I will put the code in here (some things censored because of personal information) + the error I get
import schedule
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
exec_times = ["13:17"]
wert = "5"
id = "ID: CENSORED"
def do_purchase():
PATH = "C:\\Users\\Administrator\\Desktop\\bumping\\chromedriver.exe"
URL = "URL CENSORED"
options = Options()
options.add_argument(
"user-data-dir=C:\\Users\\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data")
driver = webdriver.Chrome(PATH, chrome_options=options)
driver.get(URL)
time.sleep(10)
div = div = driver.find_element_by_xpath(
"//*[contains(text(), '{}')]".format(id))
parent = div.find_element_by_xpath('..')
buttons = parent.find_elements_by_tag_name('button')
button = buttons[0]
hover = ActionChains(driver).move_to_element(parent)
hover.perform()
time.sleep(2)
webdriver.ActionChains(driver).move_to_element(
button).click(button).perform()
time.sleep(3)
inputs = driver.find_elements_by_xpath(
"//*[contains(text(), 'Transfer amount')]")
parent = inputs[0].find_element_by_xpath('..')
input = parent.find_element_by_tag_name('input')
input.clear()
input.send_keys(wert)
confirm_span = driver.find_element_by_xpath(
"//*[contains(text(), 'Confirm')]")
confirm_button = confirm_span.find_element_by_xpath('..')
webdriver.ActionChains(driver).move_to_element(
confirm_button).click(confirm_button).perform()
time.sleep(5)
driver.quit()
def task(time):
do_purchase()
for exec_time in exec_times:
schedule.every().day.at(exec_time).do(task, exec_time)
while True:
schedule.run_pending()
time.sleep(1)
The terminal says the following
PS C:\Users\Administrator> & C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe "c:/Users/Administrator/Desktop/bumping/Client 1.py"
c:\Users\Administrator\Desktop\bumping\Client 1.py:19: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(PATH, chrome_options=options)
c:\Users\Administrator\Desktop\bumping\Client 1.py:19: DeprecationWarning: use options instead of chrome_options
driver = webdriver.Chrome(PATH, chrome_options=options)
DevTools listening on ws://127.0.0.1:64181/devtools/browser/854481e2-f194-46a1-8421-8dab5852169d
Traceback (most recent call last):
File "c:\Users\Administrator\Desktop\bumping\Client 1.py", line 65, in <module>
schedule.run_pending()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\schedule\__init__.py", line 780, in run_pending
default_scheduler.run_pending()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\schedule\__init__.py", line 100, in run_pending
self._run_job(job)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\schedule\__init__.py", line 172, in _run_job
ret = job.run()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\schedule\__init__.py", line 661, in run
ret = self.job_func()
File "c:\Users\Administrator\Desktop\bumping\Client 1.py", line 57, in task
do_purchase()
File "c:\Users\Administrator\Desktop\bumping\Client 1.py", line 20, in do_purchase
driver.get(URL)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 442, in get
self.execute(Command.GET, {'url': url})
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
self.error_handler.check_response(response)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot determine loading status
from unknown error: unexpected command response
(Session info: chrome=103.0.5060.53)
Stacktrace:
Backtrace:
Ordinal0 [0x0060D953+2414931]
Ordinal0 [0x0059F5E1+1963489]
Ordinal0 [0x0048C6B8+837304]
Ordinal0 [0x0047EB34+781108]
Ordinal0 [0x0047E06A+778346]
Ordinal0 [0x0047D646+775750]
Ordinal0 [0x0047C565+771429]
Ordinal0 [0x0047CB68+772968]
Ordinal0 [0x0048785F+817247]
Ordinal0 [0x0049255B+861531]
Ordinal0 [0x00494F70+872304]
Ordinal0 [0x0047CE36+773686]
Ordinal0 [0x00492197+860567]
Ordinal0 [0x004E4B55+1198933]
Ordinal0 [0x004D42B6+1131190]
Ordinal0 [0x004AE860+976992]
Ordinal0 [0x004AF756+980822]
GetHandleVerifier [0x0087CC62+2510274]
GetHandleVerifier [0x0086F760+2455744]
GetHandleVerifier [0x0069EABA+551962]
GetHandleVerifier [0x0069D916+547446]
Ordinal0 [0x005A5F3B+1990459]
Ordinal0 [0x005AA898+2009240]
Ordinal0 [0x005AA985+2009477]
Ordinal0 [0x005B3AD1+2046673]
BaseThreadInitThunk [0x750D62C4+36]
RtlSubscribeWnfStateChangeNotification [0x77E20969+1081]
RtlSubscribeWnfStateChangeNotification [0x77E20934+1028]
Help would be hugely appreciated

Selenium Python not scraping from this website

I was trying to interact with this website using Selenium in python. I wrote this code to select the radio button using XPATH. But some weird error is showing in my terminal. Can anyone please solve this problem? I tried but can't figure out the problem.
My code.
from select import select
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import csv
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get('https://www2.illinois.gov/idoc/Offender/Pages/InmateSearch.aspx')
button = driver.find_element_by_xpath('/html/body/table/tbody/tr/td/table[2]/tbody/tr/td[1]/table/tbody/tr/td/form/table/tbody/tr/td/input[2]')
button.click()
driver.implicitly_wait(10)
driver.quit()
Error :
DevTools listening on ws://127.0.0.1:62348/devtools/browser/ce37da62-856d-4159-ad45-9eca8e63115a
E:\Fiverr job\Orders\1\test.py:18: DeprecationWarning: find_element_by_xpath is deprecated. Please use find_element(by=By.XPATH, value=xpath) instead
button = driver.find_element_by_xpath('/html/body/table/tbody/tr/td/table[2]/tbody/tr/td[1]/table/tbody/tr/td/form/table/tbody/tr/td/input[2]')
Traceback (most recent call last):
File "E:\Fiverr job\Orders\1\test.py", line 18, in <module>
button = driver.find_element_by_xpath('/html/body/table/tbody/tr/td/table[2]/tbody/tr/td[1]/table/tbody/tr/td/form/table/tbody/tr/td/input[2]')
File "E:\Fiverr job\Orders\1\env\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 526, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "E:\Fiverr job\Orders\1\env\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1251, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "E:\Fiverr job\Orders\1\env\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 430, in execute
self.error_handler.check_response(response)
File "E:\Fiverr job\Orders\1\env\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/table/tbody/tr/td/table[2]/tbody/tr/td[1]/table/tbody/tr/td/form/table/tbody/tr/td/input[2]"}
(Session info: chrome=102.0.5005.63)
Stacktrace:
Backtrace:
Ordinal0 [0x0054D953+2414931]
Ordinal0 [0x004DF5E1+1963489]
Ordinal0 [0x003CC6B8+837304]
Ordinal0 [0x003F9500+1021184]
Ordinal0 [0x003F979B+1021851]
Ordinal0 [0x00426502+1205506]
Ordinal0 [0x004144E4+1131748]
Ordinal0 [0x00424812+1198098]
Ordinal0 [0x004142B6+1131190]
Ordinal0 [0x003EE860+976992]
Ordinal0 [0x003EF756+980822]
GetHandleVerifier [0x007BCC62+2510274]
GetHandleVerifier [0x007AF760+2455744]
GetHandleVerifier [0x005DEABA+551962]
GetHandleVerifier [0x005DD916+547446]
Ordinal0 [0x004E5F3B+1990459]
Ordinal0 [0x004EA898+2009240]
Ordinal0 [0x004EA985+2009477]
Ordinal0 [0x004F3AD1+2046673]
BaseThreadInitThunk [0x7648FA29+25]
RtlGetAppContainerNamedObjectPath [0x77BE7A7E+286]
RtlGetAppContainerNamedObjectPath [0x77BE7A4E+238]
This is because the element you try to click is located into an iframe:
So you must first switch to it before finding and clicking the desired button:
import time
driver = webdriver.Chrome(options=options, desired_capabilities=capabilities)
driver.get('https://www2.illinois.gov/idoc/Offender/Pages/InmateSearch.aspx')
#wait a little to be sure the iframe is loaded
time.sleep(2)
#find and switch to the iframe
iframe = driver.find_element(By.XPATH, '//*[#id="soi-iframe"]')
driver.switch_to.frame(iframe)
button = driver.find_element(By.XPATH, '/html/body/table/tbody/tr/td/table[2]/tbody/tr/td[1]/table/tbody/tr/td/form/table/tbody/tr/td/input[2]')
button.click()
driver.quit()
Proof of work: (click on pic to zoom in)

When i try to scrape this website with selenium and python

When i try and scrape the website it just throws some errors
I think it may have something to do with my webdriver but idk
I am trying to get this data so i can put it in a spreadsheet to get some cool staticstics
from selenium import webdriver
url = 'https://prosettings.net/cs-go-pro-settings-gear-list/'
driver = webdriver.Chrome(executable_path="C:\WebDrivers\chromedriver.exe")
driver.get(url)
names = driver.find_elements_by_class_name(" column-player")
for name in names:
title = name.find_element_by_xpath('.//a').text
print(name)
Here are the error i get in terminal
d:\downloads\PythonScraping\Test.py:5: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(executable_path="C:\WebDrivers\chromedriver.exe")
DevTools listening on ws://127.0.0.1:53131/devtools/browser/73ca0453-352e-47a0-a98a-fb539150d6f9
d:\downloads\PythonScraping\Test.py:8: DeprecationWarning: find_elements_by_* commands are deprecated. Please use find_elements() instead
names = driver.find_elements_by_class_name(" column-player")
Traceback (most recent call last):
File "d:\downloads\PythonScraping\Test.py", line 8, in <module>
names = driver.find_elements_by_class_name(" column-player")
File "C:\Users\terk0\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\remote\webdriver.py", line 783, in
find_elements_by_class_name
return self.find_elements(by=By.CLASS_NAME, value=name)
File "C:\Users\terk0\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\remote\webdriver.py", line 1279, in find_elements
return self.execute(Command.FIND_ELEMENTS, {
File "C:\Users\terk0\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\remote\webdriver.py", line 424, in
execute
self.error_handler.check_response(response)
File "C:\Users\terk0\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\selenium\webdriver\remote\errorhandler.py", line 247,
in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
(Session info: chrome=98.0.4758.102)
Stacktrace:
Backtrace:
Ordinal0 [0x00EF69A3+2582947]
Ordinal0 [0x00E8A6D1+2139857]
Ordinal0 [0x00D83A98+1063576]
Ordinal0 [0x00D862B7+1073847]
Ordinal0 [0x00D8617E+1073534]
Ordinal0 [0x00D863F0+1074160]
Ordinal0 [0x00DAFCB2+1244338]
Ordinal0 [0x00DB013B+1245499]
Ordinal0 [0x00DD9F8C+1417100]
Ordinal0 [0x00DC8594+1344916]
Ordinal0 [0x00DD834A+1409866]
Ordinal0 [0x00DC8366+1344358]
Ordinal0 [0x00DA5176+1200502]
Ordinal0 [0x00DA6066+1204326]
GetHandleVerifier [0x0109BE02+1675858]
GetHandleVerifier [0x0115036C+2414524]
GetHandleVerifier [0x00F8BB01+560977]
GetHandleVerifier [0x00F8A8D3+556323]
Ordinal0 [0x00E9020E+2163214]
Ordinal0 [0x00E95078+2183288]
Ordinal0 [0x00E951C0+2183616]
Ordinal0 [0x00E9EE1C+2223644]
BaseThreadInitThunk [0x7586FA29+25]
RtlGetAppContainerNamedObjectPath [0x77957A9E+286]
RtlGetAppContainerNamedObjectPath [0x77957A6E+238]
There are 2 problems here:
Instead of
names = driver.find_elements_by_class_name(" column-player")
it should be
names = driver.find_elements_by_class_name("column-player")
(I know, there are spaces before column-player class name there, but you still should not put them inside the locator)
2) You should add a delay to access these elements only after the page have been completely loaded.
This should work better:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = 'https://prosettings.net/cs-go-pro-settings-gear-list/'
driver = webdriver.Chrome(executable_path="C:\WebDrivers\chromedriver.exe")
wait = WebDriverWait(driver, 20)
driver.get(url)
#wait for at least 1 element visibility
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".column-player")))
#short additional wait for all the other elements to complete loading
time.sleep(0.5)
names = driver.find_elements_by_class_name("column-player")
for name in names:
title = name.find_element_by_xpath('.//a').text
print(name)

Why getting selenium.common.exceptions.NoSuchElementException in selenium python Script?

I am new to selenium and written a script to login, and when I am running the script getting the following error:-
Error:-
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="SignIn Form_email"]"}
Script:-
url = "https://someurl.com"
driver = webdriver.Chrome(executable_path="C:\CustomDrivers\chromedriver_win32\chromedriver")
driver.get(url)
print(driver.title)
user_id = driver.find_element_by_id("SignIn Form_email")
user_id.send_keys("admin#web.com")
user_password = driver.find_element_by_id("SignIn Form_password")
user_password.send_keys("web$$DD")
driver.find_element_by_xpath("//*[#id='SignIn Form']/div[3]/div/div/div/button").click()
print(driver.title)
time.sleep(5)
Full Error Trace:-
C:\Users\Lenovo\Desktop\convin\automation_test\logintest.py:6: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
driver = webdriver.Chrome(executable_path="C:\CustomDrivers\chromedriver_win32\chromedriver")
Convin
C:\Users\Lenovo\Desktop\convin\automation_test\logintest.py:9: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
user_id = driver.find_element_by_id("SignIn Form_email")
Traceback (most recent call last):
File "C:\Users\Lenovo\Desktop\convin\automation_test\logintest.py", line 9, in <module>
user_id = driver.find_element_by_id("SignIn Form_email")
File "C:\Users\Lenovo\Desktop\convin\automation_test\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 466, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "C:\Users\Lenovo\Desktop\convin\automation_test\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1238, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:\Users\Lenovo\Desktop\convin\automation_test\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 418, in execute
self.error_handler.check_response(response)
File "C:\Users\Lenovo\Desktop\convin\automation_test\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="SignIn Form_email"]"}
(Session info: chrome=95.0.4638.69)
Stacktrace:
Backtrace:
Ordinal0 [0x00780C43+2493507]
Ordinal0 [0x0071A4B1+2073777]
Ordinal0 [0x00622608+1058312]
Ordinal0 [0x0064CAA4+1231524]
Ordinal0 [0x00676C62+1404002]
Ordinal0 [0x0066597A+1333626]
Ordinal0 [0x00675038+1396792]
Ordinal0 [0x0066580B+1333259]
Ordinal0 [0x00642314+1188628]
Ordinal0 [0x0064316F+1192303]
GetHandleVerifier [0x00907BF6+1548950]
GetHandleVerifier [0x009B461C+2256060]
GetHandleVerifier [0x0080C13B+518107]
GetHandleVerifier [0x0080B1E0+514176]
Ordinal0 [0x0071F53D+2094397]
Ordinal0 [0x00723418+2110488]
Ordinal0 [0x00723552+2110802]
Ordinal0 [0x0072CE81+2150017]
BaseThreadInitThunk [0x7602FA29+25]
RtlGetAppContainerNamedObjectPath [0x77467A9E+286]
RtlGetAppContainerNamedObjectPath [0x77467A6E+238]
Thanks in advance
Hope to here from you soon.
Where is the HTML? Without it, we can't really help you.
By the way, your user_id and user_password look like a class name, are you sure about find_element_by_id method?
Shouldn't you use find_element_by_class instead?
By seeing this error
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="SignIn Form_email"]"}
You will have to make sure
This [id="SignIn Form_email"] is not under an iframe.
This [id="SignIn Form_email"] is not under a shadow-root.
You should not be on the new tab/windows launched by selenium.
You may be trying to interact with the element and it has not rendedered completely.
Also,
Please check in the dev tools (Google chrome) if we have unique entry in HTML DOM or not.
xpath that you should check :
[id="SignIn Form_email"]
Steps to check:
Press F12 in Chrome -> go to element section -> do a CTRL + F -> then paste the xpath and see, if your desired element is getting highlighted with 1/1 matching node.
Now, if it is iframe, please switch to iframe first.
wait = WebDriverWait(driver, 30)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "")))
if it is element not rendered issue, Please induce web driver wait like
wait = WebDriverWait(driver, 30)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "")))
Imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

Categories

Resources