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

Python Selenium-不能点击按钮(iFrame解决!)

谭兴学
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)
#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示例1

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

看看示例1和示例2中的名称

单击我查看HTML示例2

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

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

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

提前谢谢你!

这些评论要求进一步了解HTML代码的细节

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

这就是我错的地方。我没有提供足够的HTML代码。

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

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

代码示例(通用于您未来的努力)

iframes=驱动程序。通过id(“IDofFrame”)查找元素

驾驶员切换到。框架(iframes)

驾驶员通过xpath(“XPathOfButton”)查找元素。单击()

time.sleep(3)

driver.find_element_by_xpath("XPathOfButtonTo0004")。

驾驶员切换到。默认内容()

好的视频参考。https://www.youtube.com/watch?v=NhRx99uFUNk

共有1个答案

郎鹤龄
2023-03-14

其实你的每一次尝试都是不正确的。

驾驶员通过xpath(“//li[contains(text(),'Export Excel电子表格')]”查找元素。单击()

这里使用的是contains(text()),如果将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()

希望能有帮助

 类似资料:
  • 我正在学习硒,我需要一些帮助。好吧,我正在使用这个网站。这是用例: < li >在搜索栏中输入文本(完成) < li >按搜索按钮。(未完成) 我已尝试使用类名单击按钮,但它不起作用 我使用的是Chromedrive 74和selenium : 3.9.0版本

  • 我用selenium和python一起使用,我试图点击一个按钮,但它似乎不起作用。下面是html结构的图片: 这里 我已经尝试通过xpath和类单击该按钮,但没有成功。它也没有给我一个错误。我为每一个答案感到高兴!

  • 本文向大家介绍jQuery中iframe的操作(点击按钮新增窗口),包括了jQuery中iframe的操作(点击按钮新增窗口)的使用技巧和注意事项,需要的朋友参考一下 <iframe>也应该是框架的一种形式,它与<frame>不同的是,iframe可以嵌在网页中的任意部分。 今天遇到一个问题:怎样实现点击一个按钮,在当前的页面上新增加一个小窗口,展示一个图片信息? 如下图所示: 点击之前: 单击之

  • 我是硒的新手,当我想点击带有下一个html代码的按钮时,我得到了库存: 这就是我尝试的: 得到了这个: 同样的错误。也尝试了这个(因为图像中的信息) 同样的错误。也试试这个: 得到这个: 谢谢你的帮助!!!

  • 我就是不能点击按钮进入下一页。目前为止我尝试了以下方法 编辑 关键是重新定位元素,重新加载。由于我在表单中单击,底层代码发生了变化。司机。通过xpath(//button[@type='submit'][@name='button'])查找元素。因此,click()无法找到元素。重新加载驱动程序后。get(“%s/%s:%s”%(str(sys.argv[4])、str(sys.argv[2])、

  • 我用selenium加载一个页面:http://www.legorafi.fr/接下来,我尝试单击“Tout Accepter”按钮,但即使使用css选择器,它也不起作用。是给饼干的。 我试过这样的方法: 这是带有文本“Tout Accepter”的蓝色按钮 我该怎么办?