【问题标题】:open pdf link with python selenium用 python selenium 打开 pdf 链接
【发布时间】:2022-11-23 02:47:48
【问题描述】:
os.environ['PATH'] +=
r"C:\Users\dew23\OneDrive\Computer Science"
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://official.nba.com/nba-injury-
report-2022-23-season/")
WebDriverWait(driver,
10).until(EC.presence_of_element_located((By.XPATH,
'//*[@id="main"]/div/section[1]/div/div/p/a[12]')))
driver.find_element(By.XPATH, '//*[@id="main"]/div/section[1]/div/div/p/a[12]').send_keys(Keys.RETURN)
单击该链接,但它不会打开 pdf 文件。如何在新选项卡中打开文件?
【问题讨论】:
标签:
python
selenium
selenium-webdriver
xpath
webdriverwait
【解决方案1】:
这里有几个问题:
- 导致您的代码单击元素但不打开文件的主要问题是因为您需要等待元素可单击性。当元素已经呈现但仍未完全呈现时,元素存在是第一个状态。因此,在该阶段单击 Web 元素将不会像您看到的那样执行任何操作。
- 在您已经应用
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="main"]/div/section[1]/div/div/p/a[12]'))) 后,无需再次使用driver.find_element(By.XPATH, '//*[@id="main"]/div/section[1]/div/div/p/a[12]') 获取元素,因为前一种方法返回一个网络元素对象。
- Long
'//*[@id="main"]/div/section[1]/div/div/p/a[12]' XPath 表达式可以通过这个 XPath "//a[contains(@href,'2022-11-22_11AM')]" 更改,它更加精确和可靠。
所以,最终的代码可以是这样的:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")
options.add_argument('--disable-notifications')
webdriver_service = Service('C:webdriverschromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 20)
url = "https://official.nba.com/nba-injury-report-2022-23-season/"
driver.get(url)
wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@href,'2022-11-22_11AM')]"))).click()
它起作用了,结果是