簡體   English   中英

硒不要在現場按下按鈕

[英]selenium don't push button on site

我正在嘗試制作一個程序,作為第一步必須使用電話和密碼登錄網站 edostavka.。 如果我使用“https://edostavka.by/login?screen=withPassword” - 程序仍然重定向到“https://edostavka.by/login?screen=phone”。 幸運的是有按鈕“Войти с паролем”,它應該打開“https://edostavka.by/login?screen=withPassword”頁面。 但是硒找不到它。

我的代碼在這里:

from selenium import webdriver
import time

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from fake_useragent import UserAgent as ua
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

ua = ua(browsers='chrome')

driver_service = Service(executable_path=r'C:\Users\37533\Desktop\dostavka\dostavka\chromedriver\chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={ua}')
driver = webdriver.Chrome(service=driver_service)
driver.maximize_window()

#url = 'https://edostavka.by/login?screen=withPassword'
url = 'https://edostavka.by/login?screen=phone'
try:
    driver.get(url=url)
    time.sleep(3)
    driver.find_element(By.NAME, 'phone').send_keys('132456789')
    driver.find_element(By.LINK_TEXT, 'Войти с паролем').send_keys(Keys.ENTER)
    time.sleep(5)
except Exception as e:
    print(e)
finally:
    driver.close()
    driver.quit()

無論我如何嘗試找到該按鈕(通過 XPATH、CLASS_NAME 或 LINK_TEXT)——這些都不起作用。 我試過用 WebDriverWait 和 EC 代替 time.sleep,但它對交換“點擊”方法沒有幫助(我試過“點擊()”、“提交()”、“發送鍵(Keys.ENTER 或 \n) . 另外,我認為問題可能出在 iframe 或腳本中。但是對於 iframe - 頁面上有 4 個,而且它們似乎都是空的。對於腳本 - 我仍然沒有找到答案:我應該做什么?不得不提到它可以找到甚至用“電話號碼”填充行

每次我運行代碼時,我都會收到該消息

Message: no such element: Unable to locate element: {"method":"link text","selector":"Войти с паролем"}
  (Session info: chrome=108.0.5359.125)
Stacktrace:
Backtrace:
    (No symbol) [0x00FEF243]
    (No symbol) [0x00F77FD1]
    (No symbol) [0x00E6D04D]
    (No symbol) [0x00E9C0B0]
    (No symbol) [0x00E9C22B]
    (No symbol) [0x00ECE612]
    (No symbol) [0x00EB85D4]
    (No symbol) [0x00ECC9EB]
    (No symbol) [0x00EB8386]
    (No symbol) [0x00E9163C]
    (No symbol) [0x00E9269D]
    GetHandleVerifier [0x01289A22+2655074]
    GetHandleVerifier [0x0127CA24+2601828]
    GetHandleVerifier [0x01098C0A+619850]
    GetHandleVerifier [0x01097830+614768]
    (No symbol) [0x00F805FC]
    (No symbol) [0x00F85968]
    (No symbol) [0x00F85A55]
    (No symbol) [0x00F9051B]
    BaseThreadInitThunk [0x771800F9+25]
    RtlGetAppContainerNamedObjectPath [0x779C7BBE+286]
    RtlGetAppContainerNamedObjectPath [0x779C7B8E+238]

也許我的問題很簡單而且是新手,但我試圖在六七個小時內解決這個問題,但仍然沒有找到解決方法

首先閱讀硒文檔。 然后使用 Chrome 開發者工具(您可以按F12Ctrl+Shift+I調用)檢查目標頁面元素。

下面我為您的案例提供了一個示例解決方案:

    # accept coockies
    driver.find_element(By.XPATH, "//button[@class='button button_size_medium button_type_subtle accept-cookies_accept__mok-Y']").click()
    time.sleep(2)
    # change login mode to with password
    driver.find_element(By.XPATH, "//button[@class='button button_size_large button_type_subtle phone_button__2Z9fs phone_button__padding__e0VFd']").click()
    time.sleep(2)
    # type phone number
    driver.find_element(By.XPATH, "//input[@class='index-module_wrapperPhone__input__KD5gF']").send_keys('132456789')
    time.sleep(2)
    # type password
    driver.find_element(By.XPATH, "//input[@class='input__input input__input_size_medium']").send_keys('Password')
    time.sleep(2)
    # click to eye icon
    driver.find_element(By.XPATH, "//button[@class='withPassword_login__form_password_button__3Zrhk']").click()
    time.sleep(2)

這是使用 XPath 的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM