selenium 是一个用于Web应用程序测试的工具。在使用python登录微博时,其登录时的密码,用户名加密有些麻烦,可以使用selenium操作浏览器登录获取cookie。
直接pip就可以搞定: pip install selenium
使用selenium驱动chrome浏览器需要下载chromedriver,而且chromedriver版本需要与chrome的版本对应,版本错误的话则会运行报错。
Chromedriver下载地址http://npm.taobao.org/mirrors/chromedriver/.
在这里我使用selenium操作chrom浏览器进入微博主页
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://weibo.com/')
在使用selenium打开网页时会有些慢,这里需要设置一个等待
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
locator = (By.XPATH,'//div[@class="info_list username"]/div/input')
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) # 等待用户名输入框加载完成
加载完成后输入用户名,密码完成登录
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
username = driver.find_element_by_xpath('//div[@class="info_list username"]/div/input')
password = driver.find_element_by_xpath('//div[@class="info_list password"]/div/input')
btn = driver.find_element_by_xpath('//div[@class="info_list login_btn"]/a')
username.send_keys('') # 这里填用户名
password.send_keys('') # 这里填写密码
btn.click() # 提交
这时就已经完成登录了
在完成登录后,网页的跳转需要一定时间,这里需要再加一个等待
locator=(By.XPATH,'//div[@class="input"]/textarea')
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
在文本框输入文本
text = driver.find_element_by_xpath('//div[@class="input"]/textarea')
data = 'test test test test'
text.send_keys(data)
上传图片
这里使用的是图片的绝对地址
img_up = driver.find_element_by_xpath('//div[@class="kind"]/a[@action-type="multiimage"]/div/form/input')
img_up.send_keys(r'D:\python文件\baidu_requests\dist\img_data\1.jpg')
time.sleep(3) # 图片的上传需要时间,这里设置休眠3秒
发送微博
dtn = driver.find_element_by_xpath('//div[@class="func"]/a')
dtn.click()
关闭浏览器
driver.quit()
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # 创建浏览器对象
driver.get('https://weibo.com/') # 打开微博首页
locator = (By.XPATH,'//div[@class="info_list username"]/div/input')
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) # 设置等待登录框加载
username = driver.find_element_by_xpath('//div[@class="info_list username"]/div/input') # 获取用户名输入框
password = driver.find_element_by_xpath('//div[@class="info_list password"]/div/input') # 获取密码输入框
btn = driver.find_element_by_xpath('//div[@class="info_list login_btn"]/a') # 获取登录按钮
username.send_keys('') # 输入用户名
password.send_keys('') # 输入密码
btn.click() # 登录
locator=(By.XPATH,'//div[@class="input"]/textarea')
WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) # 设置等待文本框加载
text = driver.find_element_by_xpath('//div[@class="input"]/textarea') # 获取文本输入框
img_up = driver.find_element_by_xpath('//div[@class="kind"]/a[@action-type="multiimage"]/div/form/input') # 获取图片上传位置
dtn = driver.find_element_by_xpath('//div[@class="func"]/a') # 获取提交按钮
data = 'test test test test'
text.send_keys(data) # 输入文本
img_up.send_keys(r'D:\python文件\baidu_requests\dist\img_data\1.jpg') # 上传图片
time.sleep(3) # 等待3秒
dtn.click() # 提交
driver.quit() # 关闭浏览器