Python 如何使用从要与Selenium一起使用的特定HTML属性派生X路径
背景: 我有下面的HTML代码,我正试图获得一个用于Selenium的XPATHPython 如何使用从要与Selenium一起使用的特定HTML属性派生X路径,python,selenium,xpath,Python,Selenium,Xpath,背景: 我有下面的HTML代码,我正试图获得一个用于Selenium的XPATH <div class="btn-group"> <a type="button" class="btn btn-primary btn-user" onclick="AiD('182030801')" href="/download.pdf?id=182030801&h=917901e6659
<div class="btn-group">
<a type="button" class="btn btn-primary btn-user" onclick="AiD('182030801')" href="/download.pdf?id=182030801&h=917901e6659ad5eb53970aecf687b53e&u=cache&ext=pdf" target="_blank" style="border-top-left-radius: 3px;border-bottom-left-radius: 3px;">
<i class="fas fa-cloud-download-alt" aria-hidden="true" style="margin-right: 9px;margin-left: 2px;font-size: 25px;vertical-align: middle;color: #119802;"></i>Download ( PDF )
</a>
[...]
</div>
错误:
当我运行上述代码片段时,会产生以下错误,脚本随后崩溃:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='btn tn-primary btn-user']"}
问题:
错误状态为“没有此类元素”
”,但该元素显然存在“class=“btn btn主btn用户”
”
问题:
如何使用Seleniums XPATH“查看”class=“btn btn主btn用户”
并单击它下载PDF
链接:
PDFDrive使用Xpath
//div/a[@class='btn btn主btn用户']
driver.get('https://www.pdfdrive.com/querying-xml-xquery-xpath-and-sqlxml-in-context-d38665640.html')
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='btn-group']/a"))).click()
time.sleep(10) // it doesn't recommanded to put hardcoded wait but for debugging purpose you can check
为此导入以下包:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
browser.find_element(By.XPATH, "//a[@class='btn tn-primary btn-user']").click()
或者你也可以使用另一个定位器
CSS : a.btn.btn-primarybtn-user
所以你需要等待元素被点击。触发了下载
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
url = 'https://www.pdfdrive.com/querying-xml-xquery-xpath-and-sqlxml-in-context-d38665640.html'
driver.get(url)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'a.btn.btn-primary.btn-user'))).click()
有可能元素在iframe中。如果URL是公共的,请共享。否则,请共享element@Devlink追加代码没有错误,但是下载没有被触发:/@3kstc,更新了答案。检查等待条件。它在我这边起作用。如果你仍然面临同样的问题,请告诉我。啊,我的代码在我这方面也有效,所以它可能是其他东西。@3kstc,PDF正在下载。但是,如果你在下载后执行一些操作,它会转移注意力。要测试文件下载与否,请尝试在下载后单击命令,然后放置
时间。sleep(10)
,我似乎无法使其正常工作-如果您在这里有完整的python脚本,可能是最好的-因此我可以比较差异..仍然无法下载pdf-:(您是否使用chrome运行任何选项?否-不调用任何选项…如果您能够下载odf-您可以分享您的完整代码吗?只需简单设置即可。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = Options()
driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
url = 'https://www.pdfdrive.com/querying-xml-xquery-xpath-and-sqlxml-in-context-d38665640.html'
driver.get(url)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'a.btn.btn-primary.btn-user'))).click()