Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用从要与Selenium一起使用的特定HTML属性派生X路径_Python_Selenium_Xpath - Fatal编程技术网

Python 如何使用从要与Selenium一起使用的特定HTML属性派生X路径

Python 如何使用从要与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&amp;h=917901e6659

背景:

我有下面的HTML代码,我正试图获得一个用于Selenium的XPATH

<div class="btn-group">
<a type="button" class="btn btn-primary btn-user" onclick="AiD('182030801')" href="/download.pdf?id=182030801&amp;h=917901e6659ad5eb53970aecf687b53e&amp;u=cache&amp;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用户']

  • 确保所需元素不在iFrame下。如果它是第一个,那么您需要切换到该iFrame,然后必须执行该操作

  • 确保您正在使用正确的同步,并且元素已准备就绪。引入显式等待,如下所示:

    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
    
  • 您正在使用“div”标记,但我可以看到相应的class=btn btn主btn用户位于“a”标记内

    请尝试以下代码:

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