简体   繁体   English

硒 - 找不到选择元素

[英]Selenium - can´t find select-element

i try to automatize this webpage: https://www.crownandcaliber.com/pages/sell-my-watch-iq#top我尝试自动化这个网页: https : //www.crownandcaliber.com/pages/sell-my-watch-iq#top

I am using the following code, which works fine till the select-element on the page:我正在使用以下代码,它可以正常工作,直到页面上的选择元素:

import time
from selenium import webdriver
import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from fake_useragent import UserAgent

if __name__ == '__main__':
  WAIT = 5
  link = "https://www.crownandcaliber.com/pages/sell-my-watch-iq#top"
  ua = UserAgent()
  userAgent = ua.random
  options = Options()
  # options.add_argument('--headless')
  options.add_experimental_option ('excludeSwitches', ['enable-logging'])
  options.add_argument("start-maximized")
  options.add_argument('window-size=1920x1080')                               
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-gpu')  
  options.add_argument(f'user-agent={userAgent}')   
  srv=Service(ChromeDriverManager().install()) 
  driver = webdriver.Chrome (service=srv, options=options)                 
  driver.get (link) 
  time.sleep(WAIT)

  driver.find_element(By.XPATH, "//button[@id='onetrust-accept-btn-handler']").click()
  time.sleep(WAIT)
  print(f"Try to close info window...")
  try:
    driver.find_element(By.XPATH, "//button[@title='Close']").click()
  except:
    pass
  time.sleep(1)
  driver.find_element(By.XPATH,'//select').click()

When i run this code i get the following error:当我运行此代码时,出现以下错误:

Try to close info window...
Traceback (most recent call last):
  File "C:\DEV\Fiverr\TRY\ymarket1ng\checkClocks.py", line 50, in <module>
    driver.find_element(By.XPATH,'//select').click()
  File "C:\DEV\.venv\Normal\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1153, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\DEV\.venv\Normal\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 400, in execute 
    self.error_handler.check_response(response)
  File "C:\DEV\.venv\Normal\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 236, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//select"}
  (Session info: chrome=94.0.4606.71)

When i inspect the site i find the single element with the XPATH "//select"当我检查站点时,我发现带有 XPATH“//select”的单个元素

So why is this not working when running it with selenium?那么为什么在使用 selenium 运行它时这不起作用?

That element is inside the iframe.该元素位于 iframe 内。 You need to switch to that iframe in order to access it.您需要切换到该 iframe 才能访问它。
This should work:这应该有效:

import time
from selenium import webdriver
import undetected_chromedriver as uc
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from fake_useragent import UserAgent

if __name__ == '__main__':
  WAIT = 5
  link = "https://www.crownandcaliber.com/pages/sell-my-watch-iq#top"
  ua = UserAgent()
  userAgent = ua.random
  options = Options()
  # options.add_argument('--headless')
  options.add_experimental_option ('excludeSwitches', ['enable-logging'])
  options.add_argument("start-maximized")
  options.add_argument('window-size=1920x1080')                               
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-gpu')  
  options.add_argument(f'user-agent={userAgent}')   
  srv=Service(ChromeDriverManager().install()) 
  driver = webdriver.Chrome (service=srv, options=options)                 
  driver.get (link) 
  time.sleep(WAIT)

  driver.find_element(By.XPATH, "//button[@id='onetrust-accept-btn-handler']").click()
  time.sleep(WAIT)
  print(f"Try to close info window...")
  try:
    driver.find_element(By.XPATH, "//button[@title='Close']").click()
  except:
    pass
  time.sleep(1)
  iframe = driver.find_element_by_xpath("//iframe[contains(@src,'consumer')]")
  driver.switch_to.frame(iframe)
  driver.find_element(By.XPATH,'//select').click()

UPD UPD
Here is how you can see an iframe下面是如何查看iframe

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM