【问题标题】:Selenium Python not scraping from this websiteSelenium Python 没有从这个网站上抓取
【发布时间】:2022-06-10 21:54:47
【问题描述】:

我试图在 python 中使用 Selenium 与这个网站进行交互。我编写了这段代码来使用 XPATH 选择单选按钮。但是我的终端中显示了一些奇怪的错误。任何人都可以解决这个问题吗?我试过了,但无法找出问题所在。

我的代码。

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()

错误:

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]

【问题讨论】:

    标签: python selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    这是因为您尝试点击的元素位于iframe

    所以你必须先切换到它,然后才能找到并点击所需的按钮:

    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()
    

    工作证明:(点击图片放大

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多