Using Selenium to find elements related to drop down list from another frame — Python

試著忘記壹切 提交于 2019-12-24 12:16:48

问题


I have been trying to write a program to automate my work. My task has series of steps but I am stuck at one point. I am constantly getting NoSuchElementException. I have tried to use id, class, name methods of Selenium but nothing seems to work. My present code is this:

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome('C:\\Users\\abc\\AppData\\Local\\Programs\\Python\\Python36\\chromedriver.exe')
browser.get("http://example.com/login.aspx")

usernameElem = browser.find_element_by_id('txtuser')
usernameElem.send_keys('admin')

passwordElem = browser.find_element_by_id('txtpassword')
passwordElem.send_keys('password')

loginElem = browser.find_element_by_id('btn_login')
loginElem.click() # follows the "Read It Online" link

browser.get("http://example.com/Reports.aspx")

subscriberslistElem = browser.find_element_by_id('ContentPlaceHolder1_rptDC_lnk_0')
subscriberslistElem.click()

browser.implicitly_wait(3)
entityElem = browser.find_element_by_id("report_Entity_ClientState")
print("Test")
entityElem.send_keys('Entity1')

browser.implicitly_wait(3)
reportElem = browser.find_element_by_class_name('selectbox')
print("Test 2")
reportElem.click()

showdataElem = browser.find_element_by_id('btn_new')
showdataElem.click()

excelElem = browser.find_element_by_id('imgExport')
excelElem.click()
print('All is well')

Link to webpage, complete files.

It's strange that when I opened HTML file online as code and searched 'report_Entity_ClientState' there were no results. Images of elements I am trying to access:

First element.

Second element.

Both the entity and report element are not found. Following parts of code return error.

entityElem = browser.find_element_by_id("report_Entity_ClientState")
reportElem = browser.find_element_by_class_name('selectbox')
entityElem.send_keys('Entity1')
browser.implicitly_wait(3)

HTML code of elements:

<html xmlns="http://www.w3.org/1999/xhtml"><head><title>

</title>
    <style type="text/css">
        .rgDataDiv
        {
            height: 350px !important;
        }
        #report2_demo1_dateInput, #report2_demo2_dateInput
        {
            background: none repeat scroll 0 0 #f0f3f4;
            border: 1px solid #4D87A5;
            border-radius: 0.3em;
            color: #296872;
            font-family: "HelveticaNeue-Light" , "Helvetica Neue Light" , "Helvetica Neue" ,Helvetica,Arial, "Lucida Grande" ,sans-serif;
            font-size: 14px;
            font-weight: 400;
            height: 1.8em;
            padding: 0 0.3em;
            position: relative;
            text-align: center;
            text-shadow: 1px 1px 0 #FFFFFF;
        }
        .selectbox
        {
            width: 175px;
            height: 27px;
            background-color: #FFF;
            border: 1px solid #b7b7b7;
            font: 400 12px/18px 'Open Sans' , sans-serif;
            color: #777;
            font-weight: bold;
            border: 1px solid #ccc;
            margin: 0em 0.5em;
            padding: 0em 0.5em;
            box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);
        }
        .selectbox:hover
        {
            border: 1px solid #1261ac !important;
        }
        .selectbox option
        {
            padding: 5px;
        }
        .button
        {
            background-color: #23ad44;
            background-image: linear-gradient(to bottom, #23ad44, #23ad44);
            border: 1px solid #23ad44;
            border-radius: 3px;
            color: #ffffff;
            display: inline-block;
            font-family: arial,helvetica,sans-serif;
            font-size: 12px;
            font-weight: bold;
            margin-left: 5px;
            padding: 7px;
            text-align: center;
            text-decoration: none;
            width: 7em;
        }
        .button:hover
        {
            background-color: #23ad44;
            background-image: linear-gradient(to bottom, #23ad44, #23ad44);
            border: 1px solid #23ad44;
        }
    </style>

    <style type="text/css">
      #overlay
        {
            background-color: #000000;
            height: 100%;
            left: 0;
            opacity: 0.6;
            position: fixed;
            top: 0;
            width: 100%;
            z-index: 1500;
        }
        #theprogress
        {
            background-color: #000000;
            border: 0 solid #CCCCCC;
            height: 30px;
            line-height: 30px;
            opacity: 0.6;
            padding: 10px;
            text-align: center;
            width: 300px;
        }
        #modalprogress
        {
            position: absolute;
            top: 45%;
            left: 50%;
            margin: -11px 0 0 -150px;
            color: #990000;
            font-weight: bold;
            font-size: 14px;
        }
        .RepeaterLabel
        {
            color: #2980b9;
        }
    </style>
<link href="/WebResource.axd?d=YhrvG3mKYx0qi8zmG_e2lyIXyb_ANuRBo_sKLQFJLSvTN5PZ_1mAdbAu2oYdNj8IQ2baXlFznJaZLu1FNyX1Sw2&amp;t=634968929080000000" type="text/css" rel="stylesheet" class="Telerik_stylesheet"><link href="/WebResource.axd?d=pgzM84zOvBy03oK1BX9qj4AemgkqjvEpKd1DaZn3BmX7HYCaCPA9mDXES3WITAYhGWLhU3BijsiI-NqfoTxwKTiVY41t_WUGeTj39PR75xY1&amp;t=634968929080000000" type="text/css" rel="stylesheet" class="Telerik_stylesheet"></head>
<body>
    <form method="post" action="Rep1_SubList.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTIwNjA3NzE2NzEPZBYCAgMPZBYCAgEPZBYCZg9kFggCBQ8UKwACDxYEHgtfIURhdGFCb3VuZGceF0VuYWJsZUFqYXhTa2luUmVuZGVyaW5naGQPFCsAAhQrAAIPFgIeBFRleHQFA0FMTGRkFCsAAg8WBB8CBQhTUENHMDAzMx4FVmFsdWUFCFNQQ0cwMDMzZGQPFCsBAmZmFgEFd1RlbGVyaWsuV2ViLlVJLlJhZENvbWJvQm94SXRlbSwgVGVsZXJpay5XZWIuVUksIFZlcnNpb249MjAxMy4xLjIyMC40MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0xMjFmYWU3ODE2NWJhM2Q0FghmDw8WBB4IQ3NzQ2xhc3MFCXJjYkhlYWRlch4EXyFTQgICZGQCAQ8PFgQfBAUJcmNiRm9vdGVyHwUCAmRkAgIPDxYCHwIFA0FMTGRkAgMPDxYEHwIFCFNQQ0cwMDMzHwMFCFNQQ0cwMDMzZGQCCQ8QZGQWAWZkAgsPEGRkFgFmZAIVDzwrAA4CABQrAAJkFwEFCFBhZ2VTaXplAhQBFgIWC2RkZRQrAAALKXlUZWxlcmlrLldlYi5VSS5HcmlkQ2hpbGRMb2FkTW9kZSwgVGVsZXJpay5XZWIuVUksIFZlcnNpb249MjAxMy4xLjIyMC40MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0xMjFmYWU3ODE2NWJhM2Q0ATwrAAcACyl0VGVsZXJpay5XZWIuVUkuR3JpZEVkaXRNb2RlLCBUZWxlcmlrLldlYi5VSSwgVmVyc2lvbj0yMDEzLjEuMjIwLjQwLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTEyMWZhZTc4MTY1YmEzZDQBZGRkZGYWAmYPFCsAAhQrAAIUKwACZGRkZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDXJlcG9ydF9FbnRpdHkFDXJlcG9ydF9FbnRpdHkPFCsAAmVlZLr0AotH53uxPGSh7QymTeWwsdUnInQbJfo/1AqZAer9">
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<script src="/WebResource.axd?d=WPqzNIAf0aRvfZ51T5FqAw2&amp;t=636265663681012204" type="text/javascript"></script>


<script src="/ScriptResource.axd?d=0-K2f-KkPKroL1v8HQRfqOW6Bm5xtYnbtzo_BRMK3-orTVPkM3P6U7R-O_kYNMldQbgeLIbAfjb5i99L3QDP87wvzxMxirCvs4zeaZ5iCvg1&amp;t=16ab2387" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>

<script src="/ScriptResource.axd?d=0-K2f-KkPKroL1v8HQRfqOW6Bm5xtYnbtzo_BRMK3-orTVPkM3P6U7R-O_kYNMldkzOjZKCZKI8dbMwhU6puwXriFBMbrnAMLgehz7nDFguuKxruf9QzOB5sQpy88shJ0&amp;t=16ab2387" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCdnEq-SEy_US1KuLZmEnoxm0&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCcCRUgx0Nxj77KymelI6SbiewHQsPnET8txjQRIhxv9ow2&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCf49iuFjicOUhj3AUMkpbwDvPtFtRMJzCdeNbcfmY9RdA2&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCcStsFzhAvG6xzv928b3E8L1Pt9Gjfq_pIz-VgKJtG5wQ2&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCdT9MJqqpr-t50oq7GfpGoHVIJkcb_99EGhaoMesY6BL_Y4gIEI-tQ29AH-8m3OqeM1&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCdT9MJqqpr-t50oq7GfpGoHGGMRnTUBSrYO6OmjVxnhB1zYMtRDZSpvvOn8lbJO5tQ1&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=uLRCwOuJA-xwtRRow_E7Hq0v5K1DXj8YRZ2chYicyCfUqwvvfXR2C1xI7mel65lGuhK3m71Yx952aE6WQ4vkzg2&amp;t=ffffffffcf4a174e" type="text/javascript"></script>
<div class="aspNetHidden">

	<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBgL/046PAQLBv5udDwLBv5udDwLO0LHzAwLP0LHzAwL9nO2QARGzTJ5Kcho1tzVM3gIXWgrV275r13MCRT/Kb4EgrVKR">
</div>
    <div id="pnlMain">
	
         <div id="UpdateProgress1" style="display:none;" role="status" aria-hidden="true">
		
                <div id="overlay">
                    <div id="modalprogress">
                        <div id="theprogress">
                           <i style="background: #ffffff;" class="fa fa-spinner fa-spin fa-3x stat-elem"></i>
                        </div>
                    </div>
                </div>
            
	</div>
            <script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('scrpt1', 'form1', ['tpnlMain','pnlMain'], [], [], 1000, '');
	//]]>
</script>

            <div>
             
                <div>
                    <table>
                        <tbody><tr>
                            <td>
                              <div id="report_Entity" class="RadComboBox RadComboBox_Silk" style="width:160px;white-space:normal;">
		<!-- 2013.1.220.40 --><table summary="combobox" style="border-width:0;border-collapse:collapse;width:100%" class="">
			<tbody><tr>
				<td class="rcbInputCell rcbInputCellLeft" style="width:100%;"><input name="report_Entity" type="text" class="rcbInput radPreventDecorate rcbEmptyMessage" id="report_Entity_Input" value="Select Entity" autocomplete="off"></td><td class="rcbArrowCell rcbArrowCellRight"><a id="report_Entity_Arrow" style="overflow: hidden;display: block;position: relative;outline: none;">select</a></td>
			</tr>
		</tbody></table><div class="rcbSlide" style="z-index:6000;"><div id="report_Entity_DropDown" class="RadComboBoxDropDown RadComboBoxDropDown_Silk " style="display:none;"><div class="rcbScroll rcbWidth" style="height:200px;width:100%;"><ul class="rcbList" style="list-style:none;margin:0;padding:0;zoom:1;"><li class="rcbItem ">ALL</li><li class="rcbItem ">SPCG0033</li></ul></div></div></div><input id="report_Entity_ClientState" name="report_Entity_ClientState" type="hidden" autocomplete="off">
	</div>
                                    

                            </td>
                            <td>
                                <select name="report_Type" onchange="javascript:setTimeout('__doPostBack(\'report_Type\',\'\')', 0)" id="report_Type" class="selectbox">
		<option selected="selected" value="">Report Type</option>
		<option value="1">Total Subscriber List</option>
		<option value="2">Subscriber List with Active Package</option>

	</select>
                            </td>
                            <td>
                                
                            </td>
                            <td>
                                <input type="submit" name="btn_new" value="Show Data" id="btn_new" class="button">
                            </td>
                            <td>
                                
                            </td>
                            <td>
                                
                            </td>
                        </tr>
                    </tbody></table>
                </div>
                <span id="lbl_error" style="color:White;font-weight:bold;"></span>
                <div>
                    
                </div>
            </div>
        
</div>
    

<script type="text/javascript">
//<![CDATA[
Sys.Application.add_init(function() {
    $create(Sys.UI._UpdateProgress, {"associatedUpdatePanelId":"pnlMain","displayAfter":0,"dynamicLayout":true}, null, null, $get("UpdateProgress1"));
});

WebForm_InitCallback();Sys.Application.add_init(function() {
    $create(Telerik.Web.UI.RadComboBox, {"_dropDownWidth":0,"_height":200,"_postBackReference":"__doPostBack(\u0027report_Entity\u0027,\u0027arguments\u0027)","_skin":"Silk","_uniqueId":"report_Entity","clientStateFieldID":"report_Entity_ClientState","collapseAnimation":"{\"duration\":450}","emptyMessage":"Select Entity","expandAnimation":"{\"duration\":450}","itemData":[{},{"value":"SPCG0033"}],"localization":"{\"AllItemsCheckedString\":\"All items checked\",\"ItemsCheckedString\":\"items checked\",\"CheckAllString\":\"Check All\"}","markFirstMatch":true}, null, null, $get("report_Entity"));
});
//]]>
</script>
</form>


</body></html>

回答1:


If you look at the <input id="report_Entity_ClientState" ... > node the type is hidden. So we have to unhide the WebElement first and send the chars as follows:

entityElem = browser.find_element_by_xpath("//input[@id='report_Entity_ClientState']")
browser.execute_script("arguments[0].removeAttribute('type')", entityElem);
entityElem.send_keys('Entity1')



回答2:


browser.switch_to.frame("ContentPlaceHolder1_myIframe")

I had to add this line just before trying to find an element. Now all the methods mentioned by @DebanjanB and @Ratmir Asanov works perfectly. Thank you for your constant support.



来源:https://stackoverflow.com/questions/47390161/using-selenium-to-find-elements-related-to-drop-down-list-from-another-frame

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!