Мне нужно заполнить значения формы на целевой странице, а затем нажать кнопку через Python. Я посмотрел на Selenium и Windmill, но это тестовые рамки - я не тестирую. Я пытаюсь войти в сторонний сайт программно, затем загрузите и проанализируйте файл, который нам нужно вставить в нашу базу данных. Проблема с платформами тестирования заключается в том, что они запускают экземпляры браузеров; Я просто хочу script Я могу планировать ежедневное выполнение, чтобы получить нужную мне страницу. Любой способ сделать это?
Заполните значения форм на веб-странице с помощью Python script (а не тестирования)
Ответ 1
Вы ищете Mechanize
Форма, представляющая образец:
import re
from mechanize import Browser
br = Browser()
br.open("http://www.example.com/")
br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm (from ClientForm).
br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__)
response = br.submit() # submit current form
Ответ 2
Посмотрите на этот пример, который использует Механизм: он даст основную идею:
#!/usr/bin/python
import re
from mechanize import Browser
br = Browser()
# Ignore robots.txt
br.set_handle_robots( False )
# Google demands a user-agent that isn't a robot
br.addheaders = [('User-agent', 'Firefox')]
# Retrieve the Google home page, saving the response
br.open( "http://google.com" )
# Select the search box and search for 'foo'
br.select_form( 'f' )
br.form[ 'q' ] = 'foo'
# Get the search results
br.submit()
# Find the link to foofighters.com; why did we run a search?
resp = None
for link in br.links():
siteMatch = re.compile( 'www.foofighters.com' ).search( link.url )
if siteMatch:
resp = br.follow_link( link )
break
# Print the site
content = resp.get_data()
print content
Ответ 3
Вы можете использовать стандартную библиотеку urllib
, чтобы сделать это следующим образом:
import urllib
urllib.urlretrieve("http://www.google.com/", "somefile.html", lambda x,y,z:0, urllib.urlencode({"username": "xxx", "password": "pass"}))
Ответ 4
Представляется, что метод Mechanize, как предлагается, работает. В поле ввода, где вы должны ввести текст, используйте что-то вроде:
br["kw"] = "rowling" # (the method here is __setitem__)
Если какой-либо контент создается после отправки формы, как в поисковой системе, вы получаете ее через:
print response.read()
Ответ 5
Для флажков используйте 1
& 0
as true
& false
соответственно:
br["checkboxname"] = 1 #checked = true
br["checkboxname2"] = 0 #checked = false