我正在嘗試使用 selenium登錄https://www.crowdmed.com/login 。
這是我到目前為止的代碼。我無法使用我的憑據登錄。錯誤提示“鍵盤無法訪問標簽。當我嘗試使用 div 的名稱或 id 時,我收到錯誤提示找不到此類元素。
url ='https://www.crowdmed.com/case-selection?showCase=92447'
# This is what I really want to scrape
driver = webdriver.Firefox()
driver.get(url)
label = driver.find_element_by_xpath('//label["Email:"]')
#username = driver.find_element_by_name('Username')
#password = driver.find_element_by_id("password")
password = driver.find_element_by_xpath('//label["Password:"]')
label.send_keys("username")
password.send_keys("password")
driver.find_element_by_name("submit").click()
對應的錯誤是
---------------------------------------------------------------------------
ElementNotInteractableException Traceback (most recent call last)
C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_648/2975662060.py in <module>
3 #password = driver.find_element_by_id("password")
4 password = driver.find_element_by_xpath('//label["Password:"]')
----> 5 label.send_keys("voidyman")
6 password.send_keys("S41r4m123")
7
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in send_keys(self, *value)
475 value = self._upload(local_file)
476
--> 477 self._execute(Command.SEND_KEYS_TO_ELEMENT,
478 {'text': "".join(keys_to_typing(value)),
479 'value': keys_to_typing(value)})
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
631 params = {}
632 params['id'] = self._id
--> 633 return self._parent.execute(command, params)
634
635 def find_element(self, by=By.ID, value=None):
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
ElementNotInteractableException: Message: Element <label> is not reachable by keyboard
當我嘗試按照其他帖子中的建議(使用我的帖子中的注釋行)按名稱或 ID 訪問時,我收到以下錯誤。我嘗試了“用戶”、“用戶”、“用戶名”、“用戶名”的各種組合。
---------------------------------------------------------------------------
NoSuchElementException Traceback (most recent call last)
C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_648/3761058031.py in <module>
1 label = driver.find_element_by_xpath('//label["Email:"]')
----> 2 username = driver.find_element_by_name('Username')
3 password = driver.find_element_by_id("password")
4 #password = driver.find_element_by_xpath('//label["Password:"]')
5 label.send_keys("voidyman")
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_name(self, name)
494 element = driver.find_element_by_name('foo')
495 """
--> 496 return self.find_element(by=By.NAME, value=name)
497
498 def find_elements_by_name(self, name):
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element(self, by, value)
974 by = By.CSS_SELECTOR
975 value = '[name="%s"]' % value
--> 976 return self.execute(Command.FIND_ELEMENT, {
977 'using': by,
978 'value': value})['value']
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
NoSuchElementException: Message: Unable to locate element: [name="Username"]
uj5u.com熱心網友回復:
您使用了錯誤的表達方式。
通常//label["Email:"]不是有效的 XPath 運算式。
要正確且唯一地定位用戶名輸入欄位,您可以使用以下內容:
//div[@class="page-content"]//input[@ng-model="username"]
所以你的代碼行可能是
username_input = driver.find_element_by_xpath('//div[@]//input[@ng-model="username"]')
在您訪問那里的元素之前,您也錯過了等待頁面加載的時間。
為此,建議使用預期條件顯式等待。
有了它,您的代碼將是這樣的:
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://www.crowdmed.com/case-selection?showCase=92447'
# This is what I really want to scrape
driver = webdriver.Firefox()
wait = WebDriverWait(driver, 20)
driver.get(url)
username_input = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@]//input[@ng-model="username"]')))
username_input.send_keys(username)
您可以通過以下方式將最后 2 行合并為 1:
wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@]//input[@ng-model="username"]'))).send_keys(username)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/438440.html
標籤:Python python-3.x 硒 硒网络驱动程序
上一篇:如何打開具有相同類的多個按鈕?
