Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_choose_submit_fail(select_name):
browser = mechanicalsoup.StatefulBrowser()
browser.open_fake_page(choose_submit_fail_form)
form = browser.select_form('#choose-submit-form')
if select_name['fails']:
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.choose_submit(select_name['name'])
else:
form.choose_submit(select_name['name'])
def test_form_not_found():
browser = mechanicalsoup.StatefulBrowser()
browser.open_fake_page(page_with_various_fields)
form = browser.select_form('form')
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.input({'foo': 'bar', 'nosuchname': 'nosuchval'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.check({'foo': 'bar', 'nosuchname': 'nosuchval'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.check({'entree': 'cheese'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.check({'topping': 'tofu'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.textarea({'bar': 'value', 'foo': 'nosuchval'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.set_radio({'size': 'tiny'})
with pytest.raises(mechanicalsoup.utils.LinkNotFoundError):
form.set_select({'entree': ('no_multiple', 'no_multiple')})
for choice in value:
choice_str = str(choice) # Allow for example literal numbers
for checkbox in checkboxes:
if checkbox.attrs.get("value", "on") == choice_str:
checkbox["checked"] = ""
break
# Allow specifying True or False to check/uncheck
elif choice is True:
checkbox["checked"] = ""
break
elif choice is False:
if "checked" in checkbox.attrs:
del checkbox.attrs["checked"]
break
else:
raise LinkNotFoundError(
"No input checkbox named %s with choice %s" %
(name, choice)
)
try:
browser.open(url)
except:
error("[{:10s}] Couldn't even open the page! Do you have internet !?".format(name))
return
if is_there_captcha(browser.get_current_page().text):
error("[{:10s}] Found captcha on page loading!".format(name))
return
try:
browser.select_form(form)
browser[e_form] = email
browser[p_form] = pwd
browser.submit_selected()
except ms.utils.LinkNotFoundError:
error("[{:10s}] Something wrong with the website maybe it's blocked!".format(name))
return
if is_there_captcha(browser.get_current_page().text):
error("[{:10s}] Found captcha after submitting login page!".format(name))
return
#Now let's check if it was success by trying to use the same form again and if I could use it then the login not success
try:
browser.select_form(form)
browser.close()
error("[{:10s}] Login unsuccessful!".format(name))
except ms.utils.LinkNotFoundError:
browser.close()
status("[{:10s}] Login successful!".format(name))
def get(self, *args, **kwargs):
"""Straightforward wrapper around `requests.Session.get
`__.
:return: `requests.Response
`__
object with a *soup*-attribute added by :func:`add_soup`.
"""
response = self.session.get(*args, **kwargs)
if self.raise_on_404 and response.status_code == 404:
raise LinkNotFoundError()
Browser.add_soup(response, self.soup_config)
return response
def find_link(self, *args, **kwargs):
"""Find and return a link, as a bs4.element.Tag object.
The search can be refined by specifying any argument that is accepted
by :func:`links`. If several links match, return the first one found.
If no link is found, raise :class:`LinkNotFoundError`.
"""
links = self.links(*args, **kwargs)
if len(links) == 0:
raise LinkNotFoundError()
else:
return links[0]
:return: The selected form as a soup object. It can also be
retrieved later with :func:`get_current_form`.
"""
if isinstance(selector, bs4.element.Tag):
if selector.name != "form":
raise LinkNotFoundError
self.__state.form = Form(selector)
else:
# nr is a 0-based index for consistency with mechanize
found_forms = self.get_current_page().select(selector,
limit=nr + 1)
if len(found_forms) != nr + 1:
if self.__debug:
print('select_form failed for', selector)
self.launch_browser()
raise LinkNotFoundError()
self.__state.form = Form(found_forms[-1])
return self.get_current_form()
for (name, value) in data.items():
# Case-insensitive search for type=radio
radios = self.find_by_type("input", "radio", {'name': name})
if not radios:
raise InvalidFormMethod("No input radio named " + name)
# only one radio button can be checked
self.uncheck_all(name)
# Check the appropriate radio button (value cannot be a list/tuple)
for radio in radios:
if radio.attrs.get("value", "on") == str(value):
radio["checked"] = ""
break
else:
raise LinkNotFoundError(
"No input radio named %s with choice %s" % (name, value)
)