利用python 实现自动登录微博并发送文字微博

一 软件准备

1.安装Python 环境 2.安装selenium库 pip install selenium 3.下载chromedriver 复制到 C:\Windows\System32 http://npm.taobao.org/mirrors/chromedriver/ 选择对应的chrome版本。

二实现方法

1.使用 Selenium 工具自动化模拟浏览器,当前重点是了解对元素的定位

我们想定位一个元素,可以通过 id、name、class、tag、链接上的全部文本、链接上的部分文本、XPath 或者 CSS 进行定位,在 Selenium Webdriver 中也提供了这 8 种方法方便我们定位元素。 1)通过 id 定位:我们可以使用 find_element_by_id() 函数。比如我们想定位 id=loginName 的元素,就可以使用browser.find_element_by_id(“loginName”)。 2)通过 name 定位:我们可以使用 find_element_by_name() 函数,比如我们想要对 name=key_word 的元素进行定位,就可以使用 browser.find_element_by_name(“key_word”)。 3)通过 class 定位:可以使用 find_element_by_class_name() 函数。 4)通过 tag 定位:使用 find_element_by_tag_name() 函数。 5)通过 link 上的完整文本定位:使用 find_element_by_link_text() 函数。 6)通过 link 上的部分文本定位:使用 find_element_by_partial_link_text() 函数。有时候超链接上的文本很长,我们通过查找部分文本内容就可以定位。 7)通过 XPath 定位:使用 find_element_by_xpath() 函数。使用 XPath 定位的通用性比较好,因为当 id、name、class 为多个,或者元素没有这些属性值的时候,XPath 定位可以帮我们完成任务。 8)通过 CSS 定位:使用 find_element_by_css_selector() 函数。CSS 定位也是常用的定位方法,相比于 XPath 来说更简洁。

2.对元素进行的操作包括:

1)清空输入框的内容:使用 clear() 函数; 2)在输入框中输入内容:使用 send_keys(content) 函数传入要输入的文本; 3)点击按钮:使用 click() 函数,如果元素是个按钮或者链接的时候,可以点击操作; 4)提交表单:使用 submit() 函数,元素对象为一个表单的时候,可以提交表单;

3.注意:

由于selenium打开的chrome是原始设置的,所以访问微博首页时一定会弹出来是否提示消息的弹窗,导致不能定位到输入框。可使用如下方法关闭弹窗:

prefs = {"profile.default_content_setting_values.notifications": 2}

4.如何定位元素

点击需要定位的元素,右击点击检查。

获取xpath 路径

另外:可以下载 XPath Helper插件,安装后 在网页上选取想要提取的元素, 点击右键 选中 检查 然后 开发者工具自动打开 你可以看到 HTML代码 ,选中然后再次点击右键,选中copy 里的 copy to xpath这样就得到了xpath的值了。

三 完整代码

目前自动输入账号可能会弹出登录保护需扫二维码验证​
from selenium import webdriver
import time

browser = webdriver.Chrome()

def post_weibo(content, username, password):
    chrome_options = webdriver.ChromeOptions()
    # 把允许提示这个弹窗关闭
    prefs = {"profile.default_content_setting_values.notifications": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(options=chrome_options)
    url = 'http://weibo.com/login.php'
    driver.get(url)  # get打开微博主页
    time.sleep(5)  # 页面加载完全
    input_account = driver.find_element_by_id('loginname')  # 找到用户名输入框
    input_psw = driver.find_element_by_css_selector('input[type="password"]')  # 找到密码输入框
    # 输入用户名和密码
    input_account.send_keys(username)
    input_psw.send_keys(password)
    # 找到登录按钮
    bt_logoin = driver.find_element_by_xpath(
        '//div[@node-type="normal_form"]//div[@class="info_list login_btn"]/a')  # 找到登录按钮
    bt_logoin.click()  # 点击登录
    # 等待页面加载完毕  #有的可能需要登录保护,需扫码确认下
    time.sleep(25)
    weibo_content = driver.find_element_by_xpath('//*[ @id ="homeWrap"]/div[1]/div/div[1]/div/textarea')
    weibo_content.send_keys(content)
    bt_push = driver.find_element_by_xpath('//*[@id="homeWrap"]/div[1]/div/div[4]/div/button')
    bt_push.click()  # 点击发布
    time.sleep(5)
    driver.close()  # 关闭浏览器

if __name__ == '__main__':
    username = '微博用户名'
    password = "微博密码"
    # 自动发微博
    content = '每天进步一点'
    post_weibo(content, username, password)

通过cookie进行登录可跳过扫码登录,cookie过期后重新获取下cookie就可以了。

获取cookie到本地
#获取cookie 到本地
from selenium import webdriver
from time import sleep
import json
if __name__ == '__main__':
  driver = webdriver.Chrome()
  driver.maximize_window()
  driver.get('https://weibo.co m/login.php')
  sleep(20) # 留时间进行扫码
  Cookies = driver.get_cookies() # 获取list的cookies
  jsCookies = json.dumps(Cookies) # 转换成字符串保存
  with open('cookies.txt', 'w') as f:
    f.write(jsCookies)
利用cookie登录微博并发送文字 完整代码
from selenium import webdriver
import time
import json

browser = webdriver.Chrome()

def init_browser():
    chrome_options = webdriver.ChromeOptions()
    # 把允许提示这个弹窗关闭
    prefs = {"profile.default_content_setting_values.notifications": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://weibo.com/login.php')
    return driver
    
def login_weibo(driver):
    with open('cookies.txt', 'r', encoding='utf8') as f:
        Cookies = json.loads(f.read())
    for cookie in Cookies:
        cookie_dict = {
            'domain': '.weibo.com',
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            "expires": '',
            'path': '/',
            'httpOnly': False,
            'HostOnly': False,
            'Secure': False
        }
        driver.add_cookie(cookie_dict)
    time.sleep(3)
    driver.refresh()  # 刷新网页

def post_weibo(content,driver):
    time.sleep(5)
    weibo_content = driver.find_element_by_xpath('//*[ @id ="homeWrap"]/div[1]/div/div[1]/div/textarea')
    weibo_content.send_keys(content)
    bt_push = driver.find_element_by_xpath('//*[@id="homeWrap"]/div[1]/div/div[4]/div/button')
    bt_push.click()  # 点击发布
    time.sleep(5)
    driver.close()  # 关闭浏览器

if __name__ == '__main__':
    # cookie登录微博
    driver=init_browser()
    login_weibo(driver)
    # 自动发微博
    content = '每天进步一点'
    post_weibo(content,driver)

你可能感兴趣的:(python,开发语言)