如何使用Python登录网站并在其中执行操作?
以下是实现自动化所需的步骤: 1) 登录 2) 从下拉菜单中选择一个选项(以访问产品列表) 3) 在搜索字段中搜索某些内容(我们正在寻找的产品) 4) 单击链接(打开产品选项) 5) 单击另一个链接(以更大的.pdf格式编译与所述产品相关的所有.pdf文件) 6) 等待.pdf加载,然后下载。(将.pdf保存在我的机器上,并将产品名称作为文件名)如何使用Python登录网站并在其中执行操作?,python,login,web,Python,Login,Web,以下是实现自动化所需的步骤: 1) 登录 2) 从下拉菜单中选择一个选项(以访问产品列表) 3) 在搜索字段中搜索某些内容(我们正在寻找的产品) 4) 单击链接(打开产品选项) 5) 单击另一个链接(以更大的.pdf格式编译与所述产品相关的所有.pdf文件) 6) 等待.pdf加载,然后下载。(将.pdf保存在我的机器上,并将产品名称作为文件名) 我想知道这是否可行。如果是的话,我在哪里可以找到如何做呢?关键是要有实际的点击吗?如果您只是想下载PDF,那么我建议您使用请求库。您可能还想考虑使用S
我想知道这是否可行。如果是的话,我在哪里可以找到如何做呢?关键是要有实际的点击吗?如果您只是想下载PDF,那么我建议您使用请求库。您可能还想考虑使用Suryy。 在站点搜索方面,您可能希望使用Fiddler捕获HTTP POST请求,然后在Python中复制该请求 以下是一些代码,这些代码可能是有用的起点-这些函数将登录到服务器并下载目标文件
def login():
login_url = 'http://www.example.com'
payload = 'usr=username&pwd=password'
connection = requests.Session()
post_login = connection.post(data=payload,
url=login_url,
headers=main_headers,
proxies=proxies,
allow_redirects=True)
def download():
directory = "C:\\example\\"
url = "http://example.com/download.pdf"
filename = directory + '\\' + url[url.rfind("/")+1:]
r = connection.get(url=url,
headers=main_headers,
proxies=proxies)
file_size = int(r.headers["Content-Length"])
block_size = 1024
mode = 'wb'
print "\tDownloading: %s [%sKB]" % (filename, int(file_size/1024))
if r.status_code == 200:
with open(filename, mode) as f:
for chunk in r.iter_content(block_size):
f.write(chunk)
对于静态站点,您可以使用PyPi提供的模块,该模块可以完成您想要的所有操作—除了它不运行Javascript,因此无法在动态站点上运行。而且严格来说,它只是Python2
easy_install mechanize
对于更复杂的情况,您可能必须使用Selenium的python绑定来控制外部浏览器;或者使用嵌入web浏览器的。但是,设置这两个驱动程序要困难得多。当然,只需使用selenium webdriver即可
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://your-website.com')
search_box = browser.find_element_by_css_selector('input[id=search]')
search_box.send_keys('my search term')
browser.find_element_by_css_selector('input[type=submit']).click()
这将使你通过访问页面,输入搜索词,点击搜索,你的问题的阶段。其余部分请通读api
Mechanize目前存在一些问题,因为很多网页都是通过javascript生成的。如果它没有呈现,你就不能对页面做很多事情
如果您了解css选择器,它会有所帮助,否则您可以通过id、xpath或其他方式查找元素 您可以使用像selenium这样的Web驱动程序,它提供了python api。请分享您迄今为止的尝试。