使用selenium做一个发布CSDN文档的脚本
下面是脚本的全部代码,从登录到完成文章发布的全过程,包含了大部分selenium
常用的操作
import time
# 导入selenium包
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# 打开Chome浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
# 等待元素出现,最多等待 10 秒
wait = WebDriverWait(browser, 10)
# 最大化浏览器
browser.maximize_window()
browser.get("http://www.csdn.net/")
login_fun = browser.find_element(by=By.CLASS_NAME, value='toolbar-btn-loginfun')
login_fun.click()
login_iframe = wait.until(EC.presence_of_element_located((By.NAME, 'passport_iframe')))
# 切换到iframe上下文
browser.switch_to.frame(login_iframe)
password_login = wait.until(EC.presence_of_element_located((By.XPATH, '//span[text()="密码登录"]')))
password_login.click()
username_input = browser.find_element(By.XPATH, '//input[@placeholder="手机号/邮箱/用户名"]')
password_input = browser.find_element(By.XPATH, '//input[@placeholder="密码"]')
# 往文本框中输入
username_input.send_keys('*****')
password_input.send_keys('*****')
login_button = browser.find_element(By.XPATH, '//button[text() = "登录"]')
login_button.click()
# 切回默认上下文
browser.switch_to.default_content()
# browser.refresh()
# 等待登陆后重定向完成
put_butt = wait.until(EC.presence_of_element_located((By.XPATH, '//a[text()="发布"]')))
browser.get(put_butt.get_attribute('href'))
# 获取编辑框
editor_pre = wait.until(EC.presence_of_element_located((By.XPATH, '//pre[@class="editor__inner markdown-highlighting"]')))
editor_pre.clear()
title_input = wait.until(EC.presence_of_element_located((By.XPATH, '//input[@placeholder="请输入文章标题(5~100个字)"]')))
title_input.clear()
# 标题内容
title = ''
# 文章内容
md_con = '''
'''
title_input.send_keys(title)
editor_pre.send_keys(md_con)
time.sleep(20)
simulation_button = browser.find_element(By.XPATH, '//button[@class = "btn btn-publish"]')
simulation_button.click()
time.sleep(5)
publish_button = browser.find_element(By.XPATH, '//button[@class = "button btn-b-red ml16"]')
publish_button.click()
# 10s后关闭浏览器
time.sleep(10)
browser.quit()