我試圖用selenium在美聯儲的檔案過濾頁面上為"會議記錄(1993-至今)"打上勾。
https://www.federalreserve.gov/monetarypolicy/materials/
這是我的代碼。我已經嘗試了以下方法,我一直得到 "訊息:沒有這樣的元素。無法定位元素。Unable to locate element"
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
from selenium.webdriver import ActionChains
import time
PATH = "C:Program Files (x86)chromedriver.exe"/span>
driver = webdriver.Chrome(PATH)
driver.get("https://www.federalreserve.gov/monetarypolicy/materials/")
link = driver.find_element_by_xpath('//*[@id="article"]/app-root/div/ng-component/div[1]/div/div/form/app-doc-types/div[2]/div/div[7]/label/input').click()
link = driver.find_element_by_xpath("//div[@class='form-group']/div/div[7]/label/input[contains(text(), 'Minutes (1993-Present)')]").click()
link = driver.find_element_by_css_selector('div.form-group div:nth-child(7) label input') .click()
我把HTML的一些部分切片如下。
<app-doc-types><div class="eventSearch__label"/span>>
<p class="form-control-static">
<strong><legend class="ng-binding">Type:</legend> </strong>
</p>
</div>
<div class="eventSearch__inputs">
<div class="form-group">
<div class=" row">
<div class="col-lg-6">
<label>
< string">"checkbox" class="ng-untouched ng-pristine ng-valid" >
議程
</label>
</div><div class="col-lg-6"/span>>
<標簽>
< string">"checkbox" class="ng-untouched ng-pristine ng-valid" >
米色書籍/紅色書籍
</label>
</div><div class="col-lg-6"/span>>
<標簽>
< string">"checkbox" class="ng-untouched ng-pristine ng-valid" >
藍皮書
</label>
</div><div class="col-lg-6"/span>>
<標簽>
< string">"checkbox" class="ng-untouched ng-pristine ng-valid" >
主席的FOMC記者招待會
</label>
</div><div class="col-lg-6">
<標簽>
<input type="checkbox" class="ng-untouched ng-pristine ng-valid" >
綠皮書
</label>
</div><div class="col-lg-6">
<標簽>
<input type="checkbox" class="ng-untouched ng-pristine ng-valid" >
備忘錄
</label>
</div><div class="col-lg-6">
<標簽>
<input type="checkbox" class="ng-valid ng-dirty ng-touched" >
會議記錄(1993-至今
</label>
</div><!---->
</div>
</div>
</div>
</app-doc-types>
uj5u.com熱心網友回復:
網站需要一些時間來加載。我在用driver打開網頁后加入了time.sleep(2)。
你的第一個XPath應該可以作業,但是它非常依賴于頁面的結構,因此它可能由于頁面的HTML結構的一點修改而不能作業。
第二個XPath不會作業,實際上你不需要在路徑的末尾添加text()檢查。這應該是有效的。
//div[@class='form-group']/div/div[7]/label/input。
CSS選擇器路徑應該可以作業,但是你的css路徑可以很容易地被簡化。請看我下面的解決方案:
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
from selenium.webdriver import ActionChains
import time
driver = webdriver.Chrome()
driver.get("https://www.federalreserve.gov/monetarypolicy/materials/")
time.sleep(2)
link = driver.find_element_by_css_selector('.col-lg-6:nth-of-type(7) input') .click()
另外,你可以使用一個顯式等待。
driver.get("https://www.federalreserve.gov/monetarypolicy/materials/")
element = WebDriverWait(driver , 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR , ' .col-lg-6:nth-of-type(7) input')
element.click()
uj5u.com熱心網友回復:
你可以使用playwright
。import asyncio
from playwright.async_api import async_playwright
async def run(playwright)。
chromium = playwright.chromium # or "firefox" or "webkit".
瀏覽器 = await chromium.launch()
page = await browser.new_page()
await page.goto("https://www.federalreserve.gov/monetarypolicy/materials/")
await page.click('xpath=/html/body/div[3]/div[2]/div[2]/app-root/div/ng-component/div[1]/div/form/app-doc-types/div[2]/div/div[7]/label/input'/span>)
await browser.close()
async def main()。
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/332639.html
標籤:
上一篇:驅動API更新。
