当前位置: 首页 > 知识库问答 >
问题:

Python Selenium-无法点击按钮

秦毅
2023-03-14

我想做的就是选择下拉列表。

下拉列表示例

代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

url2 =["https://example.com/reports"]

driver = webdriver.Chrome()
driver.implicitly_wait(15)
driver.get("https://example.com")

for u in url2:
    driver.implicitly_wait(15)
    driver.get(u)

我已经尝试了很多不同的Xpaths

#driver.find_element_by_xpath("//a[contains(@class,'dropdown__trigger header-export-menu--toggle-btn')]").click()
#driver.find_element_by_xpath("//li[contains(text(),'Export Excel Spread Sheet')]").click()
#act.click().perform()

#act.click(driver.find_element_by_xpath("//a[contains(@class,'dropdown__trigger header-export-menu--toggle-btn')]")).perform()

#act.move_to_element(driver.find_element_by_xpath("//a[contains(@class,'dropdown__trigger header-export-menu--toggle-btn')]")).perform()
#WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID, "Header-Dropdown-Menu")).click())
#driver.find_element_by_class_name("//div[contains(@class,'dropdown__content header-export-menu--content')]").click()

#driver.find_element_by_xpath('//div[@class="dropdown   header-export-menu" and @class="dropdown dropdown--active  header-export-menu"]')

#driver.quit()

HTML代码

单击我查看HTML示例1

<!-- Under React Empty: 32 -->
<div class = "dropdown   header-export-menu">

看看例1和例2中的名字

单击我为超文本标记语言实例2

您会注意到 HTML 代码已更改为

<!-- Under React Empty: 32 -->
<div class = "dropdown dropdown--active  header-export-menu"> 

我认为这是我面临的问题的一部分。真是卡住了。我也尝试过使用ChroPath

提前谢谢你!

更新:

评论要求提供超文本标记语言代码的更多细节

    <div class="header-container">
<!-- react-empty: 429 -->
<div class="header-event-info" id="header-event-info">
<div class="">
<div>
<div class="single-event-info">
<div class="event-data">
    <p class="data-dd">25</p>
    <p class="data-mmyy">Jun 2017</p>
    </div>
<div class="event-detail">
    <p class="event-name">"A name of a musical"</p>
    <p class="event-more-details">
<!-- react-text: 437 -->
"Tuesday, 7:00 pm, Some Theatre"
<!-- /react-text -->
<a class="popup" data-content="" data-icon="" data-position="bottom" data-width="350" data-height="auto" data-trigger="click" data-scrollable="false">
    <span class="popup-icon">                
        <svg width="19px" height="19px" viewBox="0 0 19 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">                    
            <desc>Created with sketchtool.</desc>                    
            <defs></defs>                    
        <g id="Totals-For-Today" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">                        
            <g class="svg-icon-path" id="01-Event-Audit-Narrow---No-TFT" transform="translate(-983.000000, -121.000000)" stroke="#919598">                            
                <g id="Group" transform="translate(27.500000, 15.560000)">                                
                    <g id="iButton" transform="translate(956.000000, 106.000000)">                                    
                    <path d="M9,17.4399996 C13.6944204,17.4399996 17.5,13.63442 17.5,8.93999958 C17.5,4.24557921 13.6944204,0.43999958 9,0.43999958 C4.30557963,0.43999958 0.5,4.24557921 0.5,8.93999958 C0.5,13.63442 4.30557963,17.4399996 9,17.4399996 Z" id="outline">
                    </path>                                    
                    <path class="svg-icon-text" d="M10.4765625,13.3169527 L7.68164062,13.3169527 L7.68164062,12.930234 C7.77148482,12.9224214 7.86425733,12.914609 7.95996094,12.9067965 C8.05566454,12.8989839 8.13867152,12.8833591 8.20898438,12.8599215 C8.31835992,12.824765 8.3994138,12.7632422 8.45214844,12.6753511 C8.50488308,12.5874601 8.53125,12.4732034 8.53125,12.3325777 L8.53125,8.76421833 C8.53125,8.63921771 8.50292997,8.52496104 8.44628906,8.42144489 C8.38964815,8.31792875 8.31054738,8.23101556 8.20898438,8.16070271 C8.13476525,8.11382747 8.02734445,8.07378881 7.88671875,8.04058552 C7.74609305,8.00738223 7.61718809,7.98687462 7.5,7.97906208 L7.5,7.59820271 L9.5390625,7.46929646 L9.62109375,7.55132771 L9.62109375,12.2622652 C9.62109375,12.3989846 9.64746067,12.5122648 9.70019531,12.602109 C9.75292995,12.6919532 9.83593693,12.7583587 9.94921875,12.8013277 C10.0351567,12.8364841 10.1191402,12.8648042 10.2011719,12.8862886 C10.2832035,12.9077731 10.3749995,12.9224214 10.4765625,12.930234 L10.4765625,13.3169527 Z M9.73828125,5.18999958 C9.73828125,5.41265694 9.66503979,5.60699094 9.51855469,5.77300739 C9.37206958,5.93902385 9.19140732,6.02203083 8.9765625,6.02203083 C8.77734275,6.02203083 8.60449292,5.94293006 8.45800781,5.78472614 C8.31152271,5.62652223 8.23828125,5.44585997 8.23828125,5.24273396 C8.23828125,5.02788913 8.31152271,4.84039101 8.45800781,4.68023396 C8.60449292,4.5200769 8.77734275,4.43999958 8.9765625,4.43999958 C9.19921986,4.43999958 9.38183522,4.51519414 9.52441406,4.66558552 C9.6669929,4.81597689 9.73828125,4.99077983 9.73828125,5.18999958 L9.73828125,5.18999958 Z" id="i-2-copy-2" stroke-width="0.25" fill="#919598"></path>                                
                    </g>                            
                </g>                        
            </g>                    
        </g>                
    </svg>            
</span>
</a>
</p>
</div>
</div>
<div class="header-export">
<!-- react-empty: 32 -->
<div class="dropdown dropdown--active  header-export-menu">
    <a class="dropdown__trigger header-export-menu--toggle-btn">
        <svg width="9px" height="5px" viewBox="0 0 9 5" version="1.1">
            <desc>Created with Sketch.</desc>
            <defs></defs>
            <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
                <g id="Artboard" transform="translate(-109.000000, -97.000000)" fill="#FFFFFF">
                    <g id="Header-Dropdown-Menu" transform="translate(96.000000, 82.000000)">
                <path d="M18.1734867,19.6470682 C17.8014721,20.0543213 17.1922167,20.0476427 16.8263028,19.6470682 L13.2549246,15.7373969 C12.8829101,15.3301438 13.0295754,15 13.5787039,15 L21.4210856,15 C21.9719185,15 22.1107787,15.3368224 21.7448649,15.7373969 L18.1734867,19.6470682 Z" id="options-dropdown-menu-arrow"></path>
                    </g>
                </g>
            </g>
        </svg>
    </a>
<div class="dropdown__content header-export-menu--content">
    <ul class="export-menu">
        <li class="export-menu-item  ">
            <svg width="17px" height="14px" viewBox="0 0 17 15" version="1.1">
            <desc>Created with Sketch.</desc>
            <defs></defs>
            <g id="Basic-Report-Template-SPECS" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
                <g id="Basic-Report-Template---EXPORT-SPECS-OnClick" transform="translate(-522.000000, -180.000000)" stroke="#484B4D" stroke-width="2">
                    <g id="SPECS" transform="translate(487.000000, 14.000000)">
                        <g id="Download-Icon-Copy-2" transform="translate(43.500000, 172.000000) rotate(-180.000000) translate(-43.500000, -172.000000) translate(35.000000, 164.000000)">
                            <path d="M5.36902902,13.624518 L5.36902902,6.56257607 L12.430971,6.56257607" id="Rectangle-242-Copy-5" transform="translate(8.900000, 10.093547) rotate(-315.000000) translate(-8.900000, -10.093547) "></path>
                            <path d="M8.9,6.99999999 L8.9,12.9999999" id="Line-Copy-10" stroke-linecap="square"></path>
                            <path d="M16.9,0.0208873076 L16.9,4.02297419 C16.9,5.12639113 16.0054862,6.02088731 14.9059397,6.02088731 L2.89406028,6.02088731 C1.7927712,6.02088731 0.9,5.12262668 0.9,4.02297419 L0.9,0.0208873076" id="Rectangle-243-Copy-4" transform="translate(8.900000, 3.020887) rotate(-180.000000) translate(-8.900000, -3.020887) "></path>
                        </g>
                    </g>
                </g>
            </g>
            </svg>
            <!-- react-text: 55 -->
            "Export PDF"
            <!-- /react-text -->
            </li>
            <li class="export-menu-item">
                <svg width="17px" height="14px" viewBox="0 0 17 15" version="1.1">
                <desc>Created with Sketch.</desc>
                <defs></defs><g id="Basic-Report-Template-SPECS" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
                <g id="Basic-Report-Template---EXPORT-SPECS-OnClick" transform="translate(-522.000000, -180.000000)" stroke="#484B4D" stroke-width="2">
                    <g id="SPECS" transform="translate(487.000000, 14.000000)">
                    <g id="Download-Icon-Copy-2" transform="translate(43.500000, 172.000000) rotate(-180.000000) translate(-43.500000, -172.000000) translate(35.000000, 164.000000)">
                        <path d="M5.36902902,13.624518 L5.36902902,6.56257607 L12.430971,6.56257607" id="Rectangle-242-Copy-5" transform="translate(8.900000, 10.093547) rotate(-315.000000) translate(-8.900000, -10.093547) "></path>
                        <path d="M8.9,6.99999999 L8.9,12.9999999" id="Line-Copy-10" stroke-linecap="square">
                        </path>
                        <path d="M16.9,0.0208873076 L16.9,4.02297419 C16.9,5.12639113 16.0054862,6.02088731 14.9059397,6.02088731 L2.89406028,6.02088731 C1.7927712,6.02088731 0.9,5.12262668 0.9,4.02297419 L0.9,0.0208873076" id="Rectangle-243-Copy-4" transform="translate(8.900000, 3.020887) rotate(-180.000000) translate(-8.900000, -3.020887) 
                        "></path>
                        </g>
                    </g>
                </g>
            </g>
            </svg>
            <!-- react-text: 79 -->
            "Export Excel Spread Sheet"
            <!-- /react-text -->
            </li>
        <li class="export-menu-item  ">
            <svg width="16px" height="12px" viewBox="0 0 16 13" version="1.1">
                <desc>Created with Sketch.</desc>
                <defs></defs>
            <g id="Basic-Report-Template-SPECS" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
                <g id="Basic-Report-Template---EXPORT-SPECS-OnClick" transform="translate(-554.000000, -182.000000)" stroke="#484B4D" stroke-width="2">
                    <g id="SPECS" transform="translate(487.000000, 14.000000)">
                        <g id="Email-Icon-Copy" transform="translate(67.000000, 168.000000)">
                            <rect id="Rectangle-40" x="0" y="0.669998169" width="16" height="11" rx="2"></rect>
                            <path d="M1.55761719,3.08300781 L8.07275391,7.10009766 L14.8974609,3.14355469" id="Path-41"></path>
                            </g>
                        </g>
                    </g>
                </g>
            </svg>
            <!-- react-text: 90 -->
            "Email/Schedule Report"
            <!-- /react-text -->
        </li>
    </ul>
</div>
</div>

更新2(解决方案)

我错在这里。我没有提供足够的HTML代码。

在上面的几行上有一个“iframe”,它不允许我输入代码块。

在切换到iframe之后,我能够点击按钮并完成以下导出excel报告的任务。

代码示例(推广到您未来的努力)

#Finding the Frame
iframes = driver.find_element_by_id("IDofFrame")

#Switching to that frame
driver.switch_to.frame(iframes)

#Finding the dropdown button element
driver.find_element_by_xpath("XPathOfButton").click()

#delay on the export click
time.sleep(3)

#Export click
driver.find_element_by_xpath("XPathOfButtonToExport").click()

#If you need to switch out of the frame to go back to the original HTML block
driver.switch_to.default_content()

检查你的HTML代码的框架!!!!很好的视频可以参考。https://www.youtube.com/watch?v=NhRx99uFUNk

共有1个答案

郑嘉悦
2023-03-14

实际上,您的每一次尝试都是不正确的。

driver.find_element_by_xpath(“//li[包含(文本),'导出电子表格')”)“)单击()

这里使用的是< code>contains(text()),如果将< code>text()选择的节点集传递给

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)


element = wait.until(EC.presence_of_element_located((By.XPATH, "//li[contains(.,'Export Excel Spread Sheet')]")))
element.click()

希望有帮助

 类似资料:
  • 我试图点击下面xpath提供的按钮。它显示以下错误: cmd中。

  • 我是使用Appium和TestNg测试移动应用程序自动化的新手。我正在练习自动化amazon应用程序,应用程序已经成功启动,但当我尝试单击登录选项时,它得到了: “失败:login org.openqa.selenium.NosuChelementException:无法使用给定的搜索参数在页面上找到元素。(警告:服务器未提供任何stacktrace信息)命令持续时间或超时:0毫秒。”

  • 我的代码首先将我登录到PayPal,然后登录到eBay并导航到“支付费用”页面,然后使用PayPal结账。最后一个“继续”按钮我无法单击/提交。我尝试了xpath、id和类。我甚至尝试发送TAB 7x,直到按下“继续”按钮,然后发送Enter,但没有成功。 我已经找到了这个讨论,但我不知道如何让它为我工作。PayPal沙箱签出“继续按钮”-无法定位元素:-C#网络驱动程序

  • 我试图用硒点击“下一页”按钮,但没有成功。我使用了正确的CSS选择器还是应该把它换成别的东西?

  • 我正在尝试通过xpath,css,ID...但什么都管用。 我总是得到错误:没有这样的元素:无法定位元素 我添加了一个明确的等待,但它仍然不起作用。 你能帮帮我吗? 单选按钮