簡體   English   中英

我如何使用下拉菜單來抓取網頁? (使用硒)

[英]How do i XPATH or CSS scrape a Web-Page by utilizing the drop-down menu? (Using Selenium)

好的,所以我對在 python 中進行編碼相當陌生,我無法讓我的代碼獲取 url,轉到它,然后使用下拉菜單,我希望它到 Z99938282F04071859941E18 選項。 哪個是第一個選擇

我要抓取的網站頁面是: https://www.nba.com/stats/players/advanced/?sort=GP&dir=-1

我的代碼正在做它應該做的一切,但是每當它點擊下拉菜單時,它就不會 select 成為菜單上的第一個選項。 我很困惑有人可以指導我幫助或更好/更簡單的路線來實現我的目標。

感謝任何幫助者,

代碼:


from selenium.webdriver.support.ui import Select

from bs4 import BeautifulSoup

import pandas as pd

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait 

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()

url = r"https://www.nba.com/stats/players/advanced/?sort=GP&dir=-1"

driver.get(url)

wait = WebDriverWait(driver, 30)

wait.until(EC.element_to_be_clickable((By.XPATH,"//button[.='I Accept']"))).click()

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/main/div/div/div[2]/div/div/nba-stat-table/div[1]/div/div/select"))).click()```

嘗試使用下面的 Xpath

 (//div[@class="stats-table-pagination__info"]/select/option)[1]

與WebDriverWait一起編寫點擊的概念,這個需要稍微改變一下。 我們添加 WebDriverWait 的主要原因是基於某些條件等待元素,以便一旦可用就可以單擊它。 所以試試下面的方法

# Waiting for the element to be clickable
 1. WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "(//div[@class="stats-table-pagination__info"]/select/option)[1]")))

# Selecting on the element required
 2. select = Select(driver.find_element_by_xpath("(//div[@class="stats-table-pagination__info"]/select/option)[1]"))
    select.select_by_visible_text('All')

     

selenium 中有一個 select class 用於使用 ZE062622 tag2614BDEE31951D84C64E 構建的下拉菜單。

一旦我們像這樣定義 webdriver wait wait = WebDriverWait(driver, 30)我們就可以使用wait引用類型。 您不需要再次創建 WebDriverWait 實例。

代碼:

driver = webdriver.Chrome("C:\\Users\\Inc\\Desktop\\Selenium+Python\\chromedriver.exe")
driver.maximize_window()
wait = WebDriverWait(driver, 30)
driver.get("https://www.nba.com/stats/players/advanced/?sort=GP&dir=-1")
wait.until(EC.element_to_be_clickable((By.XPATH,"//button[.='I Accept']"))).click()

drop_down = wait.until(EC.element_to_be_clickable((By.XPATH, "//th[text()='PACE']/ancestor::div[@class='nba-stat-table']/preceding-sibling::div/descendant::select")))
select = Select(drop_down)
select.select_by_visible_text('All')

暫無
暫無

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

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