Python模拟谷歌浏览器发布文字、图片
1、导包
from selenium import webdriver
import os
import time
2、在代码中驱动谷歌驱动器
chrome_driver = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe" #根据自己的实际情况获取
os.environ['webdriver.chrome.driver'] = chrome_driver
driver = webdriver.Chrome(chrome_driver) #打开一个谷歌浏览器
3、在浏览器打开一个网址:如果是打开一个通过第三方登录加载进去的网站(如企鹅号),并且是包含在<iframe></iframe>标签中
我们可能要先获取iframe,然后才能获取其中的元素进行操作。
login_url = 'http://www.*****.login.html' #设置一个浏览器打开的网址
driver.get(login_url) #模拟浏览器打开这个网址
#定位到这个frame switch_to_frame() 已经out了;我们用 driver.switch_to.frame()
driver.switch_to.frame('iframe_id') #可以传入id、name、index以及selenium的WebElement对象 我这传id
driver.find_element_by_id('login_button').click() #模拟点击事件,找到账号密码登录按钮唯一标识,点击按钮,跳进账号密码输入框
#输入内容
driver.find_element_by_id('username').clear() #获取username元素并清空元素的内容
driver.find_element_by_id('username').send_keys('用户名是什么') #给username元素赋值,模拟用户输入账号操作
driver.find_element_by_id('password').clear() #找到密码元素,并清空内容
driver.find_element_by_id('password').send_keys('输入你的密码') #输入密码,模拟用户输入密码操作
#定位到表单点击按钮,点击提交表单
driver.find_element_by_id('login_button').click() #点击提交
4、点击提交之后判断是否登录成功[根据当前页面的url判断]
#因为点击提交之后,页面进行了刷新,从刚才的login.html变成了现在的index.html,所以我们需要程序停留一下,等待页面刷新
time.sleep(1) #程序停留一秒等待页面刷新
current_url = driver.current_url #获取当前页面的地址
if current_url == 'https://www.*******.***/': #判断当前页面地址是否是自己所期望的
print('QQLoginSuccess') #打印结果
else:
print('QQLoginError')
5、登录成功之后进入到发布操作
#定位到元素,执行点击事件,这里任意给出2种
#法一:根据xpath定位:在谷歌获取xpath的方法[F12,选取到元素,然后在(Elments)中点击鼠标右键=> Copy => Copy XPath ]
driver.find_element_by_xpath('/html/***/***/a').click(); #谷歌浏览器点击右键即可获取copy->Xpath 找到发文,点击
#法二:根据link标签内容定位
driver.find_element_by_link_text('发布').click() #找到发文,点击 可行
6、注意:这里的点击发布之后,浏览器打开了一个新窗口,浏览器此时有了2个句柄,我们要去第二个句柄操作元素
#法一:循环判断,如果句柄不是和(当前)一样,就关闭当前窗口,切换到第二个窗口
handles = driver.window_handles # 获取当前全部窗口句柄集合 list数组
for handle in handles:
if handle != driver.current_window_handle:
print('switch to second window')
driver.close() #关闭当前窗口
driver.switch_to.window(handle) #切换到第二个窗口
#法二:不管第一个窗口,已知浏览器有2个窗口,直接跳转(切换)到第二个窗口
driver.switch_to.window(driver.window_handles[1])
7、同样,页面等待任意s秒刷新
time.sleep(1)
8、找到当前页的标题,图片。按钮,点击操作,发布完成。
driver.find_element_by_xpath('/html/body/div[1]********/title').clear() #找到标题元素,清空标题内容
driver.find_element_by_xpath('/html/body/div[1]********/title').send_keys('这是标题的内容') #给标题赋值
#找到图片的输入框(input元素),然后加入本地图片路径即可
driver.find_element_by_id('file_id').send_keys('C:/Users/admin/Pictures/1.jpg')
#找到[确认]按钮,发布我们的内容
driver.find_element_by_xpath('/html/body/*******/a[2]').click() #点击发布操作
9、要点:
1) 定位到iframe操作元素
2) 程序停留n秒,页面刷新
3) 浏览器窗口切换
4) 找到input元素,直接上传本地图片路径