Can't select dropdown in selenium python - python

I am new to selenium. I have managed to login in to our work practice management system. So the basic setup is fine.
I am then faced with this:
I need to drop down the Work dropdown and select a premade report (All Tasks For Export):
I have tried a lot of stuff...... CSS Selector, Class, ID
But I always get error: Message: no such element: Unable to locate element:
Code:
driver = webdriver.Chrome()
driver.get('https://xxxxx.senta.co/a/i/a')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input[name='email']"))).send_keys("xxx#xxx.com")
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='password']"))).send_keys("xxxxxx")
driver.find_element(By.CSS_SELECTOR, 'button#submit').click()
dropdown = Select(driver.find_element(By.CSS_SELECTOR,'major#navjobs'))
But maybe I am selecting the wrong element entirely. I will post the HTML below. Maybe I understand the Selenium but not the HTML!! Thanks in advance.
And then the HTML for the elements in the list look like this:
OK here is the HTML of the page. Not sure it's going to help much!
<!DOCTYPE html><html lang="en" ng-app="senta" se-file-drop="onFileSelect($files)" ng-controller="BodyCtrl" ng-class="{ selectfile:selectfile }"> <head> <base href="/"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="HandheldFriendly" content="true" /> <meta name="robots" content="noindex"> <link id="favicon" rel='icon' type='image/ico' sizes='32x32' href='https://dsik6juztonps.cloudfront.net/client/public/images/favicon.ico'> <title ng-bind="$root.notiftitle + $root.title + $root.appTitle">Loading...</title> <link href="https://dsik6juztonps.cloudfront.net/client/public/dist/lib/20211115/lib.css" rel="stylesheet" /> <link href="https://dsik6juztonps.cloudfront.net/client/public/dist/_m258abe0ebbf4d5628de49b9a35dff42e/style.css" rel="stylesheet" /> <script src="https://dsik6juztonps.cloudfront.net/client/public/dist/lib/20211115/prelib.min.js"></script> <script src="https://dsik6juztonps.cloudfront.net/client/public/dist/lib/20211115/momentjs/en-gb.js"></script> </head> <body id="{{$root.bodyId}}" class="droptarget {{userClass}} {{skinClass}}" ng-class="{ 'on-scrolled':notAtTop, 'preheader-on':preheaderOn, 'preheader2-on':preheader2On, 'preheadertimer-on':preheaderTimerOn }"> <div ng-if="$root.user.loggedin" ng-include="'https://dsik6juztonps.cloudfront.net/client/public/dist/_m258abe0ebbf4d5628de49b9a35dff42e/html/en-gb/header.html'" ng-controller="NavBarCtrl"></div> <div class="dropindic"> <div class="lightbox"></div> <div class="centred"> <p class="text" style="">Drop your files here to upload into Senta</p><i class="fa fa-file"></i> <p class="selectbutton">Alternatively: <input type="file" id="selectfile"> <button type="button" class="btn btn-primary pseudoselect" ng-click="selectFile()">Select file</button> <button type="button" class="btn btn-normal" ng-click="cancelSelectFile()">Cancel</button> </p> </div> </div> <div ng-if="deepheader" class="deepheader"></div> <div class="container"> <div ui-view> <div class="positioner"> <div class="notifier"> <span class="spinning"><span class="spinner"><i class="fa fa-spin fa-refresh"></i></span></span> <span class="msg">Loading...</span> </div> </div> </div> <div id="react-root"></div> </div> <div ng-if="$root.expressionfooter" ng-include="'https://dsik6juztonps.cloudfront.net/client/public/dist/_m258abe0ebbf4d5628de49b9a35dff42e/html/en-gb/settings/expression/footer.html'" ng-controller="ExpressionTesterCtrl" ></div> <div ng-if="$root.previewfooter" ng-include="'https://dsik6juztonps.cloudfront.net/client/public/dist/_m258abe0ebbf4d5628de49b9a35dff42e/html/en-gb/modal/preview-footer.html'"></div> <script src="https://dsik6juztonps.cloudfront.net/client/public/dist/lib/20211115/postlib.min.js"></script> <script src="https://dsik6juztonps.cloudfront.net/client/public/dist/_m258abe0ebbf4d5628de49b9a35dff42e/app.min.en-gb.js"></script> <script src="https://www.gstatic.com/charts/loader.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/1.9.638/pdf.min.js"></script> </body><script src="https://dsik6juztonps.cloudfront.net/react/static/js/en-gb/main.eda07c95.js"></script></html>

It's look like you want find element By.CSS_SELECTOR like you are using By.XPATH.
For example, if you want to find <ul> which contains here on your screenshot
you can use:
driver.find_element(By.CLASS_NAME, 'dropdown-menu')
driver.find_element(By.CSS_SELECTOR, '.dropdown-menu')
driver.find_element(By.XPATH, '//ul[#class='dropdown-menu']')
driver.find_element(By.XPATH, '//ul[#id='work-dropdown'][#class='dropdown-menu'])
but i can't understand what you are looking for...
UPDATE:
try to find all <li> with ng-repeat='viewt in viewst track by viewt._id'
driver.find_elements(By.XPATH, '//li[#ng-repeat="viewt in viewst track by viewt._id"]')[here_is_index(even 0 idk)]
and choose needed by indexing. It's really hard to help you without html code...

Related

Injecting data into html using Flask

I have a flask app, about saving strings into some db files.
I have a base.html file which is like navbar which i extend to every page. That navbar has a lots of links which require a specific string that the user has to enter, so i wanna know if there's a way to inject strings into that base.html file, cuz i can't make a route for a navbar base file right?
Navbar base file down below
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/static/css/base.css">
<title>
BukkitList - {% block title %}{% endblock %}
</title>
</head>
<body>
<div class="NAV_B Hidden" id="MENU">
<div class="NAV_B_LINKS">
<img src="/static/assets/img/cube.png" alt="">
<a class="SUS" href="/">Home</a>
</div>
<div class="NAV_B_LINKS">
<img src="/static/assets/img/list.png" alt="">
<a class="/List{{UserId}}" href="/List">List</a>
</div>
<div class="NAV_B_LINKS">
<img src="/static/assets/img/add.png" alt="">
<a class="/Task_Add/{{UserId}}">Add Task</a>
</div>
<div class="NAV_B_LINKS">
<img src="/static/assets/img/settings.png" alt="">
<a class="SUS">Settings</a>
</div>
</div>
<div class="NAV_S" id="NAV">
<img src="/static/assets/img/cube.png" alt="">
<h3>{% block navtitle %}
{% endblock %}
</h3>
<img src="/static/assets/img/menu.png" alt="" onclick="Menu()">
</div>
{% block main %}
{% endblock %}
</body>
<script src="/static/js/base.js"></script>
</html>
Yes i need that UserId to be injected.
the question is not very understandable of where the user is inputting the {{UserID}} but from what I understand that there is that userID that you can select from the db in the Python file and you want to pass it into the HTML page or if you have a sign-in in your page, you can grab that ID when they sign in using flask_session either way if you need to pass that userID from the Python file you will need to include it in your return, so in python it will look like that if you are using session:
#app.route("/")
def main():
UserIDpy = Session["YourSessionVar"]
return render_template("YourHTMLpage.html", UserID = UserIDpy)
The UserID is the var name that will be passed into the HTML page and UserIDpy is the var name that what UserID saved at.
So that code will replace all of {{ UserID }} you have at you HTML page
I believe you can do this with Flask's session variable. It allows you to create and update a global variable that can be referenced in templates even when you don't render them directly. This is similar to Lychas' answer, but should be more suited for your purpose.
Create/update a session variable in your login route (or wherever you want to update this value) with this line:
session['UserId'] = your_id_value_here
You can then use this session variable in your jinja templates with something like the following:
<a class="/Task_Add/{{ session['UserId'] }}">Add Task</a>
(Note, if you are not already using session, you will need to import it with from Flask import session.)

How to print variable present in python with the help of html?

I've written some code for deep learning text summarization, and I'm trying to render the template using the Flask library. I'm unable to see the results. The python code can be found below.
text = ' '.join([summ['summary_text'] for summ in res])
print(text)
return render_template('result.html', prediction=text)
I'm trying to print the prediction variable which is present in the above code. Below is the html code
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/styles.css') }}">
</head>
<body>
<header>
<div class="container">
<div id="brandname">
Deep Learning App
</div>
<h2>Summarized text</h2>
</div>
</header>
<p style="color:blue;font-size:20;text-align: center;"><b>Result for Text</b></p>
<div class="results">
<p><strong>{prediction}</strong></p>
</div>
</body>
</html>
Below is output image
enter image description here
Can anyone help me how to display text present in prediction variable on web page?
You need double curly braces
<p><strong>{{ prediction }}</strong></p>

Web scrape an embedded table in google tag manager's datalayer?

I am trying to web scrape table from OECD Data. I am learning to use Python and BeautifulSoup in Jupyter to achieve this.
The closest similar post that I've found is How to web scrape tables embedded in websites using Python. In my case, the scraped object has a nested JSON object that doesn't match with what I inspect from the page.
Scraped object
<!DOCTYPE html>
<html lang="en"><head>
<script>
dataLayer = [{
'siteName':'data',
'siteEnvironment':'live',
'pageLanguage':'en',
'pageTopic':'',
'pageSubTopic':'',
'pageCategory':'oecdChart',
'indicatorCode':'FBORNPOP'
}];
</script>
<title>Foreign-born population, Total, % of population, 2013 – 2018</title>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="noindex" name="robots"/>
<link href="//data.oecd.org/media/dataportal/stylesheets/main.min.css" rel="stylesheet" type="text/css"/>
<link href="//data.oecd.org/media/oecdorg/styleassets/css/responsive/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<meta content="summary_large_image" name="twitter:card"/>
<meta content="#OECD" name="twitter:site"/>
<meta content="#OECD" name="twitter:creator"/>
<meta content="Interactive charts by the OECD" name="twitter:title"/>
<meta content="Foreign-born population, Total, % of population, 2013 – 2018" name="twitter:description"/>
<meta content="https://data.oecd.org/custom/share/txqy.png" name="twitter:image:src"/>
<meta content="website" property="og:type"/>
<meta content="OECD Data" property="og:site_name"/>
<meta content="https://data.oecd.org/chart/5Rmq" property="og:url"/>
<meta content="Interactive charts by the OECD" property="og:title"/>
<meta content="Foreign-born population, Total, % of population, 2013 – 2018" property="og:description"/>
<meta content="https://data.oecd.org/custom/share/txqy.png" property="og:image"/>
<meta content="en_GB" property="og:locale"/>
<meta content="fr_FR" property="og:locale:alternate"/>
<meta content="embedded" itemprop="context"/>
</head>
<body>
<!-- New Google Tag Manager -->
<noscript><iframe height="0" src="https://www.googletagmanager.com/ns.html?id=GTM-P5JSM4P" style="display:none;visibility:hidden" width="0"></iframe></noscript>
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window, document, 'script', 'dataLayer', 'GTM-P5JSM4P');
</script>
<!-- End New Google Tag Manager -->
<!-- Google Tag Manager -->
<noscript>
<iframe height="0" src="//www.googletagmanager.com/ns.html?id=GTM-WZ3XJR" style="display: none; visibility: hidden" width="0"></iframe>
</noscript>
<script>
(function(w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start':
new Date().getTime(),
event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'//www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-WZ3XJR');
</script>
<!-- End Google Tag Manager -->
<div class="ddp-root">
<div class="embedded-chart">
<div class="ddp-chart" data-baseline-comparison="" data-compact-header="false" data-data='{"header":{"id":"6bda3584-cfa5-46cb-afd3-d2512d0d52f8","test":false,"prepared":"2020-03-01T09:16:26.3887278Z","sender":{"id":"OECD","name":"Organisation for Economic Co-operation and Development"},"links":[{"href":"https://stats.oecd.org:443/sdmx-json/data/DP_LIVE/.FBORNPOP.TOT.PC_POP.A/OECD?json-lang=en&dimensionAtObservation=allDimensions&startPeriod=2013&endPeriod=2018","rel":"request"}]},"dataSets":[{"action":"Information","observations":{"0:0:0:0:0:0":[27.54,0,null],"0:0:0:0:0:1":[27.814,0,null],"0:0:0:0:0:2":[28.077,0,null],"0:0:0:0:0:3":[28.65,0,null],"0:0:0:0:0:4":[29.2,0,null],"0:0:0:0:0:5":[29.641,0,null],"1:0:0:0:0:0":[15.676,0,null],"1:0:0:0:0:1":[15.816,0,null],"1:0:0:0:0:2":[15.807,0,null],"1:0:0:0:0:3":[16.281,0,null],"1:0:0:0:0:4":[16.566,0,null],"1:0:0:0:0:5":[16.809,0,null],"2:0:0:0:0:0":[19.952,0,null],"2:0:0:0:0:1":[20.108,0,null],"2:0:0:0:0:2":[20.275,0,null],"2:0:0:0:0:3":[20.779,0,null],"3:0:0:0:0:0":[8.115,0,null],"3:0:0:0:0:1":[8.43,0,null],"3:0:0:0:0:2":[8.838,0,null],"3:0:0:0:0:3":[9.463,0,null],"3:0:0:0:0:4":[9.952,0,null],"3:0:0:0:0:5":[10.282,0,null],"4:0:0:0:0:0":[5.235,0,null],"4:0:0:0:0:1":[5.553,0,null],"4:0:0:0:0:2":[5.85,0,null],"4:0:0:0:0:3":[6.127,0,null],"4:0:0:0:0:4":[6.473,0,null],"4:0:0:0:0:5":[6.726,0,null],"5:0:0:0:0:0":[12.539,0,null],"5:0:0:0:0:1":[12.976,0,null],"5:0:0:0:0:2":[13.45,0,null],"5:0:0:0:0:3":[13.982,0,null],"5:0:0:0:0:4":[15.513,0,null],"5:0:0:0:0:5":[16.006,0,null],"6:0:0:0:0:0":[4.274,0,null],"6:0:0:0:0:1":[4.527,0,null],"6:0:0:0:0:2":[4.831,0,null],"6:0:0:0:0:3":[5.171,0,null],"6:0:0:0:0:4":[5.289,0,null],"6:0:0:0:0:5":[5.534,0,null],"7:0:0:0:0:0":[41.495,0,null],"7:0:0:0:0:1":[42.707,0,null],"7:0:0:0:0:2":[43.887,0,null],"7:0:0:0:0:3":[45.258,0,null],"7:0:0:0:0:4":[46.404,0,null],"7:0:0:0:0:5":[47.563,0,null],"8:0:0:0:0:0":[0.787,0,null],"8:0:0:0:0:1":[0.79,0,null],"8:0:0:0:0:2":[0.74,0,null],"8:0:0:0:0:3":[0.79,0,null],"9:0:0:0:0:0":[11.468,0,null],"9:0:0:0:0:1":[11.581,0,null],"9:0:0:0:0:2":[11.795,0,null],"9:0:0:0:0:3":[12.106,0,null],"9:0:0:0:0:4":[12.545,0,null],"9:0:0:0:0:5":[12.97,0,null],"10:0:0:0:0:0":[13.059,0,null],"10:0:0:0:0:1":[13.685,0,null],"10:0:0:0:0:2":[14.236,0,null],"10:0:0:0:0:3":[14.701,0,null],"10:0:0:0:0:4":[15.075,0,null],"10:0:0:0:0:5":[15.362,0,null],"11:0:0:0:0:0":[8.628,0,null],"11:0:0:0:0:1":[8.455,0,null],"11:0:0:0:0:2":[8.555,0,null],"11:0:0:0:0:3":[8.613,0,null],"12:0:0:0:0:0":[15.308,0,null],"12:0:0:0:0:1":[15.804,0,null],"12:0:0:0:0:2":[16.397,0,null],"12:0:0:0:0:3":[17.039,0,null],"12:0:0:0:0:4":[18.006,0,null],"12:0:0:0:0:5":[18.803,0,null],"13:0:0:0:0:0":[27.325,0,null],"13:0:0:0:0:1":[27.883,0,null],"13:0:0:0:0:2":[28.376,0,null],"13:0:0:0:0:3":[28.761,0,null],"13:0:0:0:0:4":[29.259,0,null],"13:0:0:0:0:5":[29.483,0,null],"14:0:0:0:0:0":[12.29,0,null],"14:0:0:0:0:1":[12.535,0,null],"14:0:0:0:0:2":[13.107,0,null],"14:0:0:0:0:3":[13.662,0,null],"14:0:0:0:0:4":[14.157,0,null],"14:0:0:0:0:5":[13.794,0,null],"15:0:0:0:0:0":[12.846,0,null],"15:0:0:0:0:1":[12.942,0,null],"15:0:0:0:0:2":[13.174,0,null],"15:0:0:0:0:3":[13.436,0,null],"15:0:0:0:0:4":[13.481,0,null],"15:0:0:0:0:5":[13.626,0,null],"16:0:0:0:0:0":[2.364,0,null],"16:0:0:0:0:1":[2.486,0,null],"16:0:0:0:0:2":[2.593,0,null],"17:0:0:0:0:0":[6.603,0,null],"17:0:0:0:0:1":[0.0,0,null],"17:0:0:0:0:2":[6.641,0,null],"17:0:0:0:0:4":[5.811,0,null],"18:0:0:0:0:0":[16.039,0,null],"18:0:0:0:0:1":[16.132,0,null],"18:0:0:0:0:2":[16.376,0,null],"18:0:0:0:0:3":[17.148,0,null],"19:0:0:0:0:0":[22.435,0,null],"19:0:0:0:0:1":[23.36,0,null],"19:0:0:0:0:2":[24.478,0,null],"19:0:0:0:0:3":[25.077,0,null],"20:0:0:0:0:0":[15.031,0,null],"20:0:0:0:0:1":[14.934,0,null],"20:0:0:0:0:2":[14.831,0,null],"20:0:0:0:0:3":[14.767,0,null],"20:0:0:0:0:4":[14.701,0,null],"20:0:0:0:0:5":[15.014,0,null],"21:0:0:0:0:0":[11.89,0,null],"21:0:0:0:0:1":[12.032,0,null],"21:0:0:0:0:2":[12.186,0,null],"21:0:0:0:0:3":[12.276,0,null],"21:0:0:0:0:4":[12.476,0,null],"21:0:0:0:0:5":[12.486,0,null],"22:0:0:0:0:0":[9.529,0,null],"22:0:0:0:0:1":[9.596,0,null],"22:0:0:0:0:2":[9.708,0,null],"22:0:0:0:0:3":[9.94,0,null],"22:0:0:0:0:4":[10.199,0,null],"22:0:0:0:0:5":[10.415,0,null],"23:0:0:0:0:0":[14.515,0,null],"23:0:0:0:0:1":[16.023,0,null],"23:0:0:0:0:2":[16.504,0,null],"23:0:0:0:0:3":[16.378,0,null],"23:0:0:0:0:4":[16.844,0,null],"23:0:0:0:0:5":[17.593,0,null],"24:0:0:0:0:0":[16.081,0,null],"24:0:0:0:0:1":[16.61,0,null],"24:0:0:0:0:2":[17.375,0,null],"24:0:0:0:0:3":[18.305,0,null],"24:0:0:0:0:4":[18.96,0,null],"24:0:0:0:0:5":[19.392,0,null],"25:0:0:0:0:0":[7.063,0,null],"25:0:0:0:0:1":[7.161,0,null],"25:0:0:0:0:2":[7.3,0,null],"25:0:0:0:0:3":[7.523,0,null],"26:0:0:0:0:0":[13.292,0,null],"26:0:0:0:0:1":[12.88,0,null],"26:0:0:0:0:2":[12.773,0,null],"26:0:0:0:0:3":[12.769,0,null],"26:0:0:0:0:4":[12.997,0,null],"26:0:0:0:0:5":[13.365,0,null],"27:0:0:0:0:0":[0.0,0,null],"27:0:0:0:0:1":[1.883,0,null],"27:0:0:0:0:2":[2.024,0,null],"27:0:0:0:0:3":[2.235,0,null],"27:0:0:0:0:4":[2.383,0,null],"27:0:0:0:0:5":[2.781,0,null],"28:0:0:0:0:0":[0.0,0,null],"28:0:0:0:0:1":[0.0,0,null],"28:0:0:0:0:2":[0.0,0,null],"29:0:0:0:0:0":[10.891,0,null],"29:0:0:0:0:1":[11.374,0,null],"29:0:0:0:0:2":[11.906,0,null],"29:0:0:0:0:3":[12.639,0,null],"29:0:0:0:0:4":[13.884,0,null],"29:0:0:0:0:5":[16.162,0,null],"30:0:0:0:0:0":[3.186,0,null],"30:0:0:0:0:1":[3.225,0,null],"30:0:0:0:0:2":[3.273,0,null],"30:0:0:0:0:3":[3.336,0,null],"30:0:0:0:0:4":[3.418,0,null],"30:0:0:0:0:5":[3.492,0,null],"31:0:0:0:0:0":[23.472,0,null],"31:0:0:0:0:1":[22.936,0,null],"31:0:0:0:0:2":[22.532,0,null],"31:0:0:0:0:3":[22.187,0,null],"31:0:0:0:0:4":[21.78,0,null],"32:0:0:0:0:0":[13.879,0,null],"32:0:0:0:0:1":[13.629,0,null],"32:0:0:0:0:2":[13.47,0,null],"32:0:0:0:0:3":[13.138,0,null],"32:0:0:0:0:4":[12.898,0,null],"32:0:0:0:0:5":[12.749,0,null],"33:0:0:0:0:1":[4.807,0,null],"33:0:0:0:0:2":[9.251,0,null],"33:0:0:0:0:3":[4.463,0,null],"33:0:0:0:0:4":[4.404,0,null],"33:0:0:0:0:5":[4.554,0,null]}}],"structure":{"links":[{"href":"https://stats.oecd.org/sdmx-json/dataflow/DP_LIVE/OECD","rel":"dataflow"}],"name":"OECD Data Live dataset","description":"OECD Data Live dataset","dimensions":{"observation":[{"keyPosition":0,"id":"LOCATION","name":"Country","values":[{"id":"AUS","name":"Australia"},{"id":"BEL","name":"Belgium"},{"id":"CAN","name":"Canada"},{"id":"DNK","name":"Denmark"},{"id":"FIN","name":"Finland"},{"id":"DEU","name":"Germany"},{"id":"HUN","name":"Hungary"},{"id":"LUX","name":"Luxembourg"},{"id":"MEX","name":"Mexico"},{"id":"NLD","name":"Netherlands"},{"id":"NOR","name":"Norway"},{"id":"PRT","name":"Portugal"},{"id":"SWE","name":"Sweden"},{"id":"CHE","name":"Switzerland"},{"id":"GBR","name":"United Kingdom"},{"id":"USA","name":"United States"},{"id":"CHL","name":"Chile"},{"id":"GRC","name":"Greece"},{"id":"IRL","name":"Ireland"},{"id":"NZL","name":"New Zealand"},{"id":"EST","name":"Estonia"},{"id":"FRA","name":"France"},{"id":"ITA","name":"Italy"},{"id":"SVN","name":"Slovenia"},{"id":"AUT","name":"Austria"},{"id":"CZE","name":"Czech Republic"},{"id":"ESP","name":"Spain"},{"id":"TUR","name":"Turkey"},{"id":"POL","name":"Poland"},{"id":"ISL","name":"Iceland"},{"id":"SVK","name":"Slovak Republic"},{"id":"ISR","name":"Israel"},{"id":"LVA","name":"Latvia"},{"id":"LTU","name":"Lithuania"}],"role":"REF_AREA"},{"keyPosition":1,"id":"INDICATOR","name":"Indicator","values":[{"id":"FBORNPOP","name":"Foreign-born population"}]},{"keyPosition":2,"id":"SUBJECT","name":"Subject","values":[{"id":"TOT","name":"Total"}]},{"keyPosition":3,"id":"MEASURE","name":"Measure","values":[{"id":"PC_POP","name":"% of population"}]},{"keyPosition":4,"id":"FREQUENCY","name":"Frequency","values":[{"id":"A","name":"Annual"}],"role":"FREQ"},{"id":"TIME_PERIOD","name":"Time","values":[{"id":"2013","name":"2013"},{"id":"2014","name":"2014"},{"id":"2015","name":"2015"},{"id":"2016","name":"2016"},{"id":"2017","name":"2017"},{"id":"2018","name":"2018"}],"role":"TIME_PERIOD"}]},"attributes":{"dataSet":[],"series":[],"observation":[{"id":"TIME_FORMAT","name":"Time Format","values":[{"id":"P1Y","name":"Annual"}]},{"id":"OBS_STATUS","name":"Observation Status","values":[]}]},"annotations":[{"title":"Copyright OECD - All rights reserved","uri":"","text":""},{"title":"Terms and Conditions","uri":"http://www.oecd.org/termsandconditions/","text":""},{"title":"Privacy Policy","uri":"http://www.oecd.org/privacy/","text":""},{"title":"MyOECD","uri":"https://www.oecd.org/login","text":""},{"title":"Contact Us","uri":"http://www.oecd.org/contact/","text":""}]}}' data-editable="false" data-embedded="true" data-end-time="2018" data-external-footer-id="embedded-chart-footer" data-fixed-height="true" data-frequency="A" data-highlighted-locations="" data-indicator="FBORNPOP" data-language="en" data-locations="" data-measure="PC_POP" data-referrer="//data.oecd.org/migration/foreign-born-population.htm" data-show-baseline="False" data-show-non-baseline="True" data-source="OECD International Migration Statistics: International migration database" data-start-time="2013" data-stored-configuration="impose" data-subject="TOT" data-table-note="Information on data for Israel: http://oe.cd/israel-disclaimer" data-type="table" data-use-latest-data="False">
</div>
<footer class="embedded-chart-footer" id="embedded-chart-footer">
<div class="copyright-tooltip info-tooltip" tabindex="0">
<i class="icon-ddp-copyright"></i>
<p class="info-tooltip-content">
© OECD
<span class="separator">·</span>
Terms & Conditions
</p>
</div>
<p class="explore">Compare countries on <a class="chart-open-referrer" href="//data.oecd.org/migration/foreign-born-population.htm" target="_top">data.oecd.org</a></p>
<p class="logo"><a class="chart-open-referrer" href="//data.oecd.org/migration/foreign-born-population.htm" target="_top" title="OECD Data">OECD Data</a></p>
</footer>
</div>
</div>
<script src="//data.oecd.org/media/dataportal/scripts/ddp-chart-config.js"></script>
<script src="//data.oecd.org/media/dataportal/scripts/jquery.min.js"></script>
<script src="//data.oecd.org/media/dataportal/scripts/application.js"></script>
</body></html>
Am I scraping a cached webpage?
Edited
See below for the code I use and above for the response.
from bs4 import BeautifulSoup
from requests_html import HTMLSession
session = HTMLSession()
oecd_url = "https://data.oecd.org/chart/5Rmq"
response = session.get(oecd_url)
soup = BeautifulSoup(response.html.html,"html5lib")
soup
it has a googletaskmanager, it is used for analytics and ecomerce services, it deploys all items to your page as an api. thats why you couldnt find the elements that you choose
<noscript>
<iframe height="0" src="//www.googletagmanager.com/ns.html?id=GTM-WZ3XJR"
style="display: none; visibility: hidden" width="0"></iframe>
</noscript>

Python Flask + AngularJS + DevExtreme

First, I am fairly new to javascript but I know my way around python. I am trying to learn javascript and I may be out of my league with trying this, but that is how you learn right.
Secondly, Flask and AngularJS play well together with a little help. Special thanks goes to shea256 (https://github.com/shea256/angular-flask)
Now, I am able to get the 'test application' up and running fairly easily.
However, I want to add DevExtreme to this stack and I am having some issues.
Here is what I have:
index.html
<!doctype html>
<html lang="en" ng-app="AngularFlask">
<head>
<meta charset="utf-8">
<title>AngularFlask</title>
<link rel="stylesheet" href="/static/css/bootstrap.css">
<link rel="stylesheet" href="/static/css/main.css">
<link rel="stylesheet" type="text/css" href="http://cdn3.devexpress.com/jslib/16.1.5/css/dx.common.css" />
<link rel="stylesheet" type="text/css" href="http://cdn3.devexpress.com/jslib/16.1.5/css/dx.light.css" />
<!--<script src="/static/lib/jquery/jquery.min.js"></script>-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <!--2.7.0-->
<!--<script src="/static/lib/angular/angular.js"></script>
<script src="/static/lib/angular/angular-resource.js"></script>-->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular-resource.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular-route.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular-sanitize.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/globalize/0.1.1/globalize.min.js"></script>
<!--<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.2.3/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js"></script>
-->
<script type="text/javascript" src="http://cdn3.devexpress.com/jslib/16.1.5/js/dx.web.js"></script>
<script src="/static/js/app.js"></script>
<script src="/static/js/controllers.js"></script>
<script src="/static/js/services.js"></script>
<script src="/static/lib/bootstrap/bootstrap.min.js"></script>
</head>
<body>
<div id="header" class="header navbar navbar-static-top">
<div class="navbar-inner">
<div class="container">
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
</button>
<a class="brand" href="/">AngularFlask</a>
<div class="nav-collapse collapse">
<ul class="nav pull-right">
<li class="">
Home
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container page">
<div id="content" class="container main" ng-view>
</div>
<hr>
<footer id="footer" class="footer">
<div class="footer-left">
About |
Home
</div>
<div class="footer-right">
<span>© 2013 AngularFlask</span>
</div>
</footer>
</div>
</body>
</html>
controllers.js
function IndexController($scope) {
}
function AboutController($scope) {
}
function PostListController($scope, Post) {
var postsQuery = Post.get({}, function(posts) {
$scope.posts = posts.objects;
});
}
function PostDetailController($scope, $routeParams, Post) {
var postQuery = Post.get({ postId: $routeParams.postId }, function(post) {
$scope.post = post;
});
}
app.js
'use strict';
angular.module('AngularFlask', ['angularFlaskServices', 'dx'])
.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'static/partials/landing.html',
controller: IndexController
})
.when('/about', {
templateUrl: 'static/partials/about.html',
controller: AboutController
})
.when('/post', {
templateUrl: 'static/partials/post-list.html',
controller: PostListController
})
.when('/post/:postId', {
templateUrl: '/static/partials/post-detail.html',
controller: PostDetailController
})
/* Create a "/blog" route that takes the user to the same place as "/post" */
.when('/blog', {
templateUrl: 'static/partials/post-list.html',
controller: PostListController
})
.otherwise({
redirectTo: '/'
})
;
$locationProvider.html5Mode(true);
}])
;
With this, when I navigate to localhost:5000, this error is reported
https://docs.angularjs.org/error/$injector/modulerr?p0=AngularFlask&p1=%5B$injector:unpr%5D%20http:%2F%2Ferrors.angularjs.org%2F1.5.7%2F$injector%2Funpr%3Fp0%3D%2524routeProvider%0AO%2F%3C#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:6:412%0Adb%2Fn.$injector%3C#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:43:84%0Ad#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:40:344%0Ae#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:41:78%0Ah%2F%3C.invoke#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:41:163%0Ad#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:39:313%0Ag%2F%3C#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:39:445%0Ar#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:7:353%0Ag#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:39:222%0Adb#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:43:246%0ABc%2Fc#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:20:359%0ABc#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:21:163%0Age#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:19:484%0A#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fangularjs%2F1.5.7%2Fangular.min.js:315:135%0An.Callbacks%2Fi#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.12.4%2Fjquery.min.js:2:27444%0An.Callbacks%2Fj.fireWith#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.12.4%2Fjquery.min.js:2:28213%0A.ready#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.12.4%2Fjquery.min.js:2:30004%0AK#https:%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.12.4%2Fjquery.min.js:2:30366%0AO%2F%3C()%20angular.min.js:6g%2F%3C()%20angular.min.js:40r()%20angular.min.js:7g()%20angular.min.js:39db()%20angular.min.js:43Bc%2Fc()%20angular.min.js:20Bc()%20angular.min.js:21ge()%20angular.min.js:19%3Canonymous%3E%20angular.min.js:315n.Callbacks%2Fi()%20jquery.min.js:2n.Callbacks%2Fj.fireWith()%20jquery.min.js:2.ready()%20jquery.min.js:2K()%20jquery.min.js:21%20angular.min.js:6:412
It may be worth mentioning that if I use AngularJS 1.0.7 (included with Angular-Flask) the issue is cleared up until I add my html dev tag
<div dx-button="{
text: 'Generate random value'
}"></div>
then these are the errors:
Error: e.$$postDigest is not a function
Error: t.$root is undefined
Error: a.$watch is not a function
Error: c.$watch is not a function
Error: a.$watch is not a function
Error: t.dxTemplateModel is undefined
So this tells me that DevExpress is missing some functions in AngularJS 1.0.7; However, when using AngularJS 1.2.X Angular-Flask breaks. Is there anyway to get these two to play well together?
DevExtreme supports AngularJS 1.2 - 1.4. Your try to use too old version of AngularJS. Scripts in this repo were updated 3 years ago. But you can easily use another angularjs version. Your flask layout can look like below:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }} - My Flask Application</title>
<link rel="stylesheet" type="text/css" href="/static/content/site.css" />
<link rel="stylesheet" type="text/css" href="http://cdn3.devexpress.com/jslib/16.1.5/css/dx.common.css" />
<link rel="stylesheet" type="text/css" href="http://cdn3.devexpress.com/jslib/16.1.5/css/dx.light.css" />
</head>
<body class="dx-theme-generic-typography" ng-app="myApp">
<div ng-controller="defaultCtrl">
<div dx-button="buttonOptions"></div>
</div>
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.16/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.16/angular-sanitize.js"></script>
<script src="http://cdn3.devexpress.com/jslib/16.1.5/js/dx.all.js"></script>
<script src="/static/scripts/application.js"></script>
</body>
</html>
And the /static/scripts/application.js file:
var myApp = angular.module("myApp", ["dx"]);
myApp.controller("defaultCtrl", function($scope) {
$scope.buttonOptions = {
text: "My button",
onClick: function(){
alert("Hi!");
}
};
});

How to bypass Mechanize "AmbiguityError" in Python

I am trying to upload images to ImageBam by filling its web-forms and requesting POST.
I don't know too much about urllib2, httplib, multipart stuff. I am trying to use MECHANIZE module
But I think it shouldn't be too complex because it is just a web form, I will fill it and post it.
The page, where upload forms are:
http://www.imagebam.com/basic-upload
The form I am trying to fill:
<form name='form' id='form' enctype="multipart/form-data" method="post" action="/sys/upload/save">
<table align="center">
<tr>
<td>
01: <input type="file" name="file[]" size="30"><br>
02: <input type="file" name="file[]" size="30"><br>
03: <input type="file" name="file[]" size="30"><br>
04: <input type="file" name="file[]" size="30"><br>
05: <input type="file" name="file[]" size="30"><br>
also I saw a guy created an app using python;
http://sourceforge.net/projects/pymguploader/files/pymguploader/2011-12-24/
I want to write something like that, but much more basic of course.
anyway, here is my problem;
when I execute these;
import mechanize
a=mechanize.Browser()
a.open("http://www.imagebam.com/basic-upload")
forms=mechanize.ParseResponse(response)
a.select_form(nr=0)
dosya=open("file path...","r")
everything works fine I think.
also
print a
gives this output:
<Browser visiting http://www.imagebam.com/basic-upload
selected form:
<form POST http://www.imagebam.com/sys/upload/save multipart/form-data
<FileControl(file[]=<No files added>)>
<FileControl(file[]=<No files added>)>
<FileControl(file[]=<No files added>)>
<FileControl(file[]=<No files added>)>
<SelectControl(content_type=[*x, 1, 0])>
<SelectControl(thumb_size=[*100, 150, 180, 250, 300, 350])>
<SelectControl(thumb_aspect_ratio=[crop, *resize])>
<SelectControl(thumb_file_type=[gif, *jpg])>
<CheckboxControl(thumb_info=[1])>
<CheckboxControl(gallery_options=[*1])>>
>
but when I
a["file[]"]=dosya
the error is;
Traceback (most recent call last):
File "<pyshell#46>", line 1, in <module>
a["file[]"]=dosya
File "build\bdist.win32\egg\mechanize\_form.py", line 2780, in __setitem__
control = self.find_control(name)
File "build\bdist.win32\egg\mechanize\_form.py", line 3101, in find_control
return self._find_control(name, type, kind, id, label, predicate, nr)
File "build\bdist.win32\egg\mechanize\_form.py", line 3183, in _find_control
raise AmbiguityError("more than one control matching "+description)
AmbiguityError: more than one control matching name 'file[]'
How can I solve this problem?
SOLVED
Solution:
a.add_file(dosya,"filename",nr=0)
that automatically searches type=file inputs and adds my file to first one(nr=0 provides it)
New Problem
After I sending POST data (or I think it sends)
This page comes as a response;
<?xml version='1.0' encoding='utf-8'?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://developers.facebook.com/schema/" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="ImageBam.com" />
<meta name="description" content="Free Image Hosting and photo sharing. Create an online album with bulk upload tools and share with family and friends." />
<meta name="keywords" content="image hosting, free image hosting, photo sharing, upload photo, free photo gallery, photo host, image gallery" />
<meta name="robots" content="follow" />
<meta name="revisit-after" content="1 days" />
<meta property="fb:admins" content="3433880" />
<link rel="stylesheet" href="http://www.imagebam.com/style.css" type="text/css" />
<link rel="shortcut icon" href="http://www.imagebam.com/favicon.ico" />
<title>Fast, Free Image Hosting - ImageBam</title>
<script type="text/javascript" src="http://www.imagebam.com/JS/imagebam.js"></script>
<script type="text/javascript" src="http://www.imagebam.com/JS/pt.js"></script>
</head>
<body>
<!-- IMAGEBAM HEADER -->
<div class="scrollme">
<div class="abody">
<!-- everything -->
<div class="banner cursor" style="float:left;" onclick='top.location="http://www.imagebam.com"'></div>
<div style="float:right; text-align:right; border:0px solid #f2f2f2; border-top:none; padding-top: 5px; padding-left:3px; padding-right:10px;">
</div>
<div style="clear:left;"></div>
<div class="dtab">
<ul>
<li class="inactive">Multi-Upload</li>
<li class="inactive">Zip-Upload</li>
<li class="inactive">Basic Upload</li>
<li class="inactive">Learn More</li>
<li class="inactive">FAQ</li>
<li class="inactive">Register</li>
<li class="inactive">Login</li>
<li class="inactive">Premium</li>
</ul>
</div><br />
<!-- Google Code for Imagebam Uploaded Image Conversion Page -->
<script type="text/javascript">
/* <![CDATA[ */
function img404(ID,fsrc){
document.getElementById('thumb_404_info').style.display="block";
document.getElementById("img_"+ID).style.display = "none";
document.getElementById("alt_"+ID).style.display = "inline";
setTimeout("reloadImg("+ID+",'"+fsrc+"')", 500);
}
function reloadImg(ID,fsrc){
mrand = Math.random();
document.getElementById("img_"+ID).style.display = "inline";
document.getElementById("alt_"+ID).style.display = "none";
document.getElementById("img_"+ID).src = fsrc+"?"+mrand;
}
/* ]]> */
</script>
<div class="box_wait" style="text-align:center; display:none;" id="thumb_404_info">Thumbnails that are being processed in the background might not load right away.<br /></div>
<div style="text-align:center; margin-bottom:5px;">
<b>NEW!</b> VideoBam.com (HD Video Hosting)
</div>
<fieldset><legend><img src="/img/icons/photos.png" alt="" style="vertical-align:middle; line-height:16px; height:16px; padding-right:5px;" /> All at Once</legend>
<table style="width:100%;"><tr>
<td>
<b>BB-Code</b><br />
<textarea onclick="this.select();" style="width:300px; height:200px;"></textarea>
</td>
<td>
<b>HTML-Code</b><br />
<textarea onclick="this.select();" style="width:300px; height:200px;"></textarea>
</td>
</tr>
</table>
</fieldset>
<!--
<fieldset><legend style='color:green;'><img src='/img/icons/new.png' alt='' style='vertical-align:middle; line-height:16px; height:16px; padding-right:5px;'> NEW! ImageBam Remote Upload Widget</legend>
<b>Webmasters / Mods!</b><br> Allow your users to upload images to ImageBam <b>without leaving your website or forum!</b><br> Add our new ImageBam Remote Upload Widget to you website!<br>
Please spread the word! Thank you!
</fieldset>
-->
<div style="text-align:center; margin-bottom:5px;">
<b>NEW!</b> VideoBam.com (HD Video Hosting)
</div>
<fieldset><legend><img src="/img/icons/delete.png" alt="" style="vertical-align:middle; line-height:16px; height:16px; padding-right:5px;" /> All Removal Links</legend>
Do not share the links below. You can use them to delete the photos you have uploaded.<br />
<textarea onclick="this.select()" style="width:600px; height:200px;"></textarea>
</fieldset>
<!-- Google Code for Imagebam Uploaded Image Conversion Page -->
<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = 1068053810;
var google_conversion_language = "en_US";
var google_conversion_format = "3";
var google_conversion_color = "ffffff";
var google_conversion_label = "6tqpCPa-chCy6qT9Aw";
var google_conversion_value = 0;
/* ]]> */
</script>
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="http://www.googleadservices.com/pagead/conversion/1068053810/?label=6tqpCPa-chCy6qT9Aw&guid=ON&script=0" />
</div>
</noscript>
</div>
<div class="footer">
<a class="footera" href="http://www.imagebam.com/">ImageBam</a> | <a class="footera" href="/remote-upload-widget">Remote Upload Widget</a> | <a class="footera" href="http://www.imagebam.com/screengrab_upload_firefox_extension">screengrab tool</a> | <a class="footera" href="http://www.imagebam.com/terms-of-service">terms of service</a> | <a class="footera" href="http://www.imagebam.com/frequently-asked-questions">help</a> | <a class="footera" href="http://support.imagebam.com" target="_blank">support forums</a> | <a class="footera" href="http://code.google.com/p/imagebam-api/">API for developers</a> | <a class="footera" href="http://www.imagebam.com/report-abuse">report abuse</a>
<div style="height:35px; overflow:hidden;">
<div id="google_translate_element" style="margin-top:9px;"></div><script type="text/javascript">
function googleTranslateElementInit() {
new google.translate.TranslateElement({
pageLanguage: 'en'
}, 'google_translate_element');
}
</script><script src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="text/javascript"></script>
</div>
<div style="text-align:center; color:#999; margin-top:10px;">
<table style="margin:auto;"><tr><td><img src="http://1.imagebam.com/static/img/tux.png" alt="tux" /></td><td>Powered by dedicated Linux servers. Flixya Entertainment, LLC © 2010</td></tr></table>
</div>
</div>
</div>
<div id="updater_index"></div>
<script type="text/javascript">
</script>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2424497-2";
urchinTracker();
</script>
</body>
</html>
Normally, it is the after-uploading page that comes out with image's links etc.
But I think there is a dynamic process, because the links were not prepared when I got the page.
Am I missing something? because even if you dont fill the inputs on form, if you submit() it, it redirects you to that after-uploading page..
Use select_control() also with nr=0 to select the first file.

Categories

Resources