Python模拟谷歌浏览器发布文字、图片

                                                        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,然后才能获取其中的元素进行操作。
    
    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元素,直接上传本地图片路径
   

你可能感兴趣的:(#,PythonSelenium)