Scrolling and selecting a checkbox in a drop down using python webdriver - python-2.7

I have to select a checkbox from within a drop down. The problem is the value is not visible. I need to scroll down to reach the value.
html
<select class="select_box" tabindex="25" id="cbo_CC_CType"
name="cbo_CC_CType" multiple="multiple" multi-select="true"
autofillkey="CMDTYPE" title="COMMAND TYPE">
<option value="Authorization">Authorization</option>
<option value="Cancel">Cancel</option>
<option value="Change">Change</option>
<option value="Clear">Clear</option>
<option value="Final">Final</option>
<option value="Final1">Final</option>
<option value="Fina2">Final</option>
<option value="Fina3">Final</option>
.
.
.
.
.
.
<option value="MyCar">MyCar</option>
</select>
I tried:
chromedriver.find_element_by_xpath("//select[#id='cbo_CC_CType']/option[#value='MyCar']").click()
Can someone please help

Related

Using Amazon's affiliate API for autocompletion with SearchIndex (Category)

I need to have Amazon affiliate API for autocompletion work with SearchIndex (Marketplace category)
For example,
I have a site that searches for Kindle Books, and would like to have Amazon's autocompletion only return Kindle Book results.
The following URL will return all products with the keyword 'photography'
http://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=photography
How can I have the above URL return only Kindle Books with keyword 'photography'?
I have found the solution.
The search-alias query needs to be changed to digital-text, like so:
http://completion.amazon.com/search/complete?search-alias=digital-text&client=amazon-search-ui&mkt=1&q=photography
You can do this for any marketplace category by changing search-alias to the appropriate query variable.
Here's a complete list of search-alias variables:
<select>
<option selected="selected" value="search-alias=aps">All Departments</option>
<option value="search-alias=alexa-skills">Alexa Skills</option>
<option value="search-alias=instant-video">Amazon Video</option>
<option value="search-alias=warehouse-deals">Amazon Warehouse Deals</option>
<option value="search-alias=appliances">Appliances</option>
<option value="search-alias=mobile-apps">Apps & Games</option>
<option value="search-alias=arts-crafts">Arts, Crafts & Sewing</option>
<option value="search-alias=automotive">Automotive Parts & Accessories</option>
<option value="search-alias=baby-products">Baby</option>
<option value="search-alias=beauty">Beauty & Personal Care</option>
<option value="search-alias=stripbooks">Books</option>
<option value="search-alias=popular">CDs & Vinyl</option>
<option value="search-alias=mobile">Cell Phones & Accessories</option>
<option value="search-alias=fashion">Clothing, Shoes & Jewelry</option>
<option value="search-alias=fashion-womens"> Women</option>
<option value="search-alias=fashion-mens"> Men</option>
<option value="search-alias=fashion-girls"> Girls</option>
<option value="search-alias=fashion-boys"> Boys</option>
<option value="search-alias=fashion-baby"> Baby</option>
<option value="search-alias=collectibles">Collectibles & Fine Art</option>
<option value="search-alias=computers">Computers</option>
<option value="search-alias=courses">Courses</option>
<option value="search-alias=financial">Credit and Payment Cards</option>
<option value="search-alias=digital-music">Digital Music</option>
<option value="search-alias=electronics">Electronics</option>
<option value="search-alias=gift-cards">Gift Cards</option>
<option value="search-alias=grocery">Grocery & Gourmet Food</option>
<option value="search-alias=handmade">Handmade</option>
<option value="search-alias=hpc">Health, Household & Baby Care</option>
<option value="search-alias=local-services">Home & Business Services</option>
<option value="search-alias=garden">Home & Kitchen</option>
<option value="search-alias=industrial">Industrial & Scientific</option>
<option value="search-alias=digital-text">Kindle Store</option>
<option value="search-alias=fashion-luggage">Luggage & Travel Gear</option>
<option value="search-alias=luxury-beauty">Luxury Beauty</option>
<option value="search-alias=magazines">Magazine Subscriptions</option>
<option value="search-alias=movies-tv">Movies & TV</option>
<option value="search-alias=mi">Musical Instruments</option>
<option value="search-alias=office-products">Office Products</option>
<option value="search-alias=lawngarden">Patio, Lawn & Garden</option>
<option value="search-alias=pets">Pet Supplies</option>
<option value="search-alias=pantry">Prime Pantry</option>
<option value="search-alias=software">Software</option>
<option value="search-alias=sporting">Sports & Outdoors</option>
<option value="search-alias=tools">Tools & Home Improvement</option>
<option value="search-alias=toys-and-games">Toys & Games</option>
<option value="search-alias=vehicles">Vehicles</option>
<option value="search-alias=videogames">Video Games</option>
<option value="search-alias=wine">Wine</option>
</select>

Regex Find/Replace in Notepad++ advanced

I'm trying to find all values and replace with following pattern :
<option value="">text1343 </option>
<option value="">text2yt4</option>
<option value="">text34ug</option>
<option value="">defffe</option>
<option value="">ewewe</option>
What do I want?
I want to copy the text between <option value=""> AND </option> then paste it between "".
like this :
<option value="text1343">text1343 </option>
How can I do a replacement?
find value
value="">(.*)?(<)
replace with
value="$1">$1<
Find: <option value="">(.*)</option>
Replace with: <option value="\1">\1</option>

Trying to fill a form with Scrapy FormRequest, unexpected results

I'm trying to fill the form that is at www.wetseal.com/Stores that allows selecting the state to show stores from.
<form action="http://www.wetseal.com/Stores?dwcont=C73689620" method="post" id="dwfrm_storelocator_state">
<fieldset>
<div class="form-row required ">
<label for="dwfrm_storelocator_address_states_stateUSCA">
<span>State</span>
<span class="required-indicator">*</span>
</label>
<select id="dwfrm_storelocator_address_states_stateUSCA" class="input-select required" name="dwfrm_storelocator_address_states_stateUSCA">
<option value="">Select...</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="HI">Hawaii</option>
<option value="ID">Idaho</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="MD">Maryland</option>
<option value="MA">Massachusetts</option>
<option value="MI">Michigan</option>
<option value="MN">Minnesota</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="NE">Nebraska</option>
<option value="NV">Nevada</option>
<option value="NH">New Hampshire</option>
<option value="NJ">New Jersey</option>
<option value="NM">New Mexico</option>
<option value="NY">New York</option>
<option value="NC">North Carolina</option>
<option value="ND">North Dakota</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="OR">Oregon</option>
<option value="PA">Pennsylvania</option>
<option value="PR">Puerto Rico</option>
<option value="RI">Rhode Island</option>
<option value="SC">South Carolina</option>
<option value="SD">South Dakota</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="VA">Virginia</option>
<option value="WA">Washington</option>
<option value="WV">West Virginia</option>
<option value="WI">Wisconsin</option>
</select>
</div>
<button type="submit" name="dwfrm_storelocator_findbystate" value="Search">
Search
</button>
</fieldset>
</form>
Looking with Chrome I can see the request being made and the form params:
That said, I have a very simple spider that, looking at the docs, sends a FormRequest to that URL to fill the form (In this case I'm testing for Arizona shops - AZ):
class WetSealStoreSpider(Spider):
name = "wetseal_store_spider"
allowed_domains = ["wetseal.com"]
start_urls = [
"http://www.wetseal.com/Stores"
]
def parse(self, response):
yield FormRequest.from_response(response,
formname='dwfrm_storelocator_state',
formdata={'dwfrm_storelocator_address_states_stateUSCA': 'AZ',
'dwfrm_storelocator_findbystate': 'Search'},
callback=self.parse1)
def parse1(self, response):
print response.status
print response.body
When it gets to make the FormRequest, looking at the response, everything seems OK:
But in the callback method, I see this in the response:
It looked like a GET request was made at the end, and the url is all wrong:
'http://www.wetseal.com/Search?q=&dwfrm_storelocator_findbystate=Search&dwfrm_storelocator_address_states_stateUSCA=AZ'
Any idea what I'm doing wrong?
Thanks!
You're using formname but the form doesn't have a name.
Try using formxpath='id("dwfrm_storelocator_state")' instead.
try this
states = response.xpath(
".//select[#id='dwfrm_storelocator_address_states_stateUSCA']//option[#value!='']/#value").extract()
url = self.get_text_from_node(response.xpath("//form[#id='dwfrm_storelocator_state']/#action"))
for state in states:
form_data = {'dwfrm_storelocator_address_states_stateUSCA': state,
"dwfrm_storelocator_findbystate": "Search"}
yield FormRequest(url,
formdata=form_data,
callback=self.your_Callback)

Transfer Value from drop down to a

I need some help ...
I need the location drop down box to determine the appropriate inbox the form should be sent to.
ex if I choose Houston from the drop down box it will send it to the PayrollUSA email.
Im currently using a radio button to make the selection but i would like to automate with the drop down.
Im pretty new to this but im sure theres a if statement that can tie them together...
im using .asp for this.
<input type="radio" name="payroll" value="PayrollUSA#mail.com" checked="checked">US Payroll
<input type="radio" name="payroll" value="PayrollCAN#mail.com">CAN Payroll
<input type="radio" name="payroll" value="PayrollUK#mail.com">UK Payroll
<input type="radio" name="payroll" value="PayrollHK#mail.com">HK Payroll
Drop down selection
<SELECT SIZE="1" NAME="Business_Unit" style="width: 205px;" class="answers">
<option selected >Select</option>
<OPTION>Calgary</OPTION>
<OPTION>Chicago</OPTION>
<OPTION>Hong Kong</OPTION>
<OPTION>Houston</OPTION>
<OPTION>London</OPTION>
<OPTION>Los Angeles</OPTION>
<OPTION>Montreal</OPTION>
<OPTION>New York</OPTION>
<OPTION>New York Corporate</OPTION>
<OPTION>Philadelphia</OPTION>
<OPTION>San Francisco</OPTION>
<OPTION>Toronto</OPTION>
<OPTION>Toronto Corporate</OPTION>
<OPTION>Vancouver</OPTION>
</SELECT>
If you need the option value to be held then try this:
<SELECT SIZE="1" NAME="Business_Unit" style="width: 205px;" class="answers">
<option value="">Select an Option</option>
<option <% if Business_Unit= "PayrollCAN#mail.com" then %> selected <% End if %> value="PayrollCAN#mail.com">Calgary</option>
<option <% if Business_Unit= "PayrollUSA#mail.com" then %> selected <% End if %> value="PayrollUSA#mail.com">Chicago</option>
</select>
etc. for each option and same value may be used for different option displays
I imaging this should just be html based. So your option menu should look like:
<SELECT SIZE="1" NAME="Business_Unit" style="width: 205px;" class="answers">
<option value="-1">Select an Option</option>
<OPTION value="PayrollCAN#mail.com">Calgary</OPTION>
<OPTION value="PayrollUSA#mail.com">Chicago</OPTION>
<OPTION value="PayrollHK#mail.com">Hong Kong</OPTION>
<OPTION value="PayrollUSA#mail.com">Houston</OPTION>
<OPTION value="PayrollUK#mail.com">London</OPTION>
<OPTION value="PayrollUSA#mail.com">Los Angeles</OPTION>
<OPTION value="PayrollCAN#mail.com">Montreal</OPTION>
<OPTION value="PayrollUSA#mail.com">New York</OPTION>
<OPTION value="PayrollUSA#mail.com">New York Corporate</OPTION>
<OPTION value="PayrollUSA#mail.com">Philadelphia</OPTION>
<OPTION value="PayrollUSA#mail.com">San Francisco</OPTION>
<OPTION value="PayrollCAN#mail.com">Toronto</OPTION>
<OPTION value="PayrollCAN#mail.com">Toronto Corporate</OPTION>
<OPTION value="PayrollCAN#mail.com">Vancouver</OPTION>
</SELECT>
You can use the same value multiple times if needed

Looking to replace option value="" with the text between <option value="">this text</option>

I have this html, and I want to replace the numeric value within value="##" with the value between <option>value</option>
For example: <option value="16">Accounting</option>, I want to know the regex it'd take to automatically change it to <option value="Accounting">Accounting</option>
I plan on doing it to this entire list.
<option value="16">Accounting A.A.S.</option>
<option value="15">Accounting A.S.</option>
<option value="33">Art Studies</option>
<option value="18">Business Administration A.A.S.</option>
<option value="17">Business Administration A.S.</option>
<option value="20">Computer Network Technician</option>
<option value="21">Computer Support Specialist</option>
<option value="40">Criminal Justice A.A.S.</option>
<option value="39">Criminal Justice A.S.</option>
<option value="37">Criminal Justice: Corrections Certificate</option>
<option value="41">Criminal Justice: Cybersecurity</option>
<option value="42">Criminal Justice: Economic Crime</option>
<option value="43">Criminal Justice: Forensic Investigation</option>
<option value="34">Early Childhood</option>
<option value="22">Fashion Buying & Merchandising</option>
<option value="35">Fine Arts</option>
<option value="23">Health Services Management A.S.</option>
<option value="24">Health Services Management Technology A.A.S.</option>
<option value="92">Human Resource Management A.A.S.</option>
<option value="44">Human Services</option>
<option value="25">International Business</option>
<option value="36">Liberal Arts & Sciences: Childhood Education</option>
<option value="49">Liberal Arts & Sciences: Communication Arts</option>
<option value="50">Liberal Arts & Sciences: General Studies</option>
<option value="52">Liberal Arts & Sciences: Social Science</option>
<option value="51">Liberal Arts and Sciences: Humanities</option>
<option value="26">Marketing A.A.S.</option>
<option value="27">Medical Coder/Transcriptionist Certificate</option>
<option value="45">Music Industry</option>
<option value="28">Paralegal</option>
<option value="46">Photographic Technology</option>
<option value="47">Radio/Television Broadcasting</option>
<option value="91">Science A.S.</option>
<option value="29">Small Business Management</option>
<option value="30">Small Business Management: Certificate</option>
<option value="48">Teaching Assistant: Certificate</option>
<option value="31">Travel & Tourism: Hospitality & Events Management</option>
<option value="32">Website and E-Business Development</option>
EDIT: I want to use GREP, within textwrangler
Just remove the value attributes. <option> by default takes a value of it's content.
<option value="Accounting">Accounting</option>
is equivalent to:
<option>Accounting</option>
Edit: using sed you can do
sed -r s/' value="[0-9]+"'//g
I assume this means you want:
<option value="14">Foobar</option>
To become:
<option value="Foobar">Foobar</option>
If so, here's the Javascript. I assume the select variable contains the surrounding <select> tag DOM element, e.g. by form.nameOfselect.
for ( var option : select.options ) {
option.value = option.text;
}
Under Linux:
sed 's|<option value="[^"]*">\([^<>]*\)</option>|<option value="\1">\1</option>|g'
If your HTML is well-formed, this will do the trick:
Regex:
(?<=<option) value="\d+"
Replace with the empty string.
In HTML, option values fall back automatically to the displayed text, if no value attribute is present.
You've added that you want to perform the operation in a text editor. I wrote something assuming you'd want to use php, and I'll let it stand here because I think it's important.
Anyway, using TextWrangler (or any other text editor), replace
<option value="[^"]*">([^<]*)</option>
with
<option value="\1">\1</option>
As you're mostly active in the php tag, I assume you're asking for a solution in php. However, let me begin this answer with an advice: If you are looking for a way, state your goal, not a technology you think is suitable. regexps work, but this is far easier in simplexml:
$xml = str_replace("&", "&", $xml); // Fix errors in your XML
$doc = simplexml_load_string($xml);
foreach ($doc->xpath("//option") as $o) {
$o["value"] = "" . $o;
}
$xml = $doc->asXML();
If you insist on using a regexps, you can do so:
$xml = preg_replace(
'#<option value="[^"]*">([^<]*)</option>#',
'<option value="$1">$1</option>', $xml);
It can be made a bit more general, but it works when there are no other attributes in the option tag:
/(.*")([^"]+)(">)([^<]+)(.*)/
Then replace the captured string with this:
$1$4$3$4$5
If you're using backslash as the subgroup reference character, replace the dollar signs with backslash.
Tip: There is a great regexp tester online at http://gskinner.com/RegExr/, check it out!
I haven't tested this, but I believe this will work, using jQuery.
$('option').each(function(elm) { $(this).val($(this).text()); });