多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

使用 selenium爬虫知乎回答-自动化测试

更新时间:2022-03-15 09:35:28 作者:多测师 浏览:109

  关于selenium库

  用途:

  模拟人工打开浏览器并进行一些操作,类似于手机上的连点器和脚本,可以有效的解决弹窗类的反扒机制。

  使用:

  pip 安装 ,下载浏览器驱动 ,给驱动配置环境 ,重启pycharm测试。

  关于panda库

  用途:

  将字典转换成dataframe并更以csv的形式导出。

  使用:

  pip 安装即可。

使用 selenium爬虫知乎回答-自动化测试

  代码:

  from selenium import webdriver # 从selenium导入webdriver

  from selenium.webdriver.common.by import By # 内置定位器策略集

  from selenium.webdriver.support.wait import WebDriverWait # 用于实例化一个Driver的显式等待

  from selenium.webdriver.support import expected_conditions as EC

  from selenium.webdriver.common.action_chains import ActionChains

  from pandas.core.frame import DataFrame

  option = webdriver.ChromeOptions()

  option.add_argument("headless")

  driver = webdriver.Chrome() # chrome_options=option 这个参数设置之后可以隐藏浏览器

  driver.get('https://www.zhihu.com/question/284206141') # 修改这里的地址

  def waitFun():

  js = """

  let equalNum = 0;

  window.checkBottom = false;

  window.height = 0;

  window.intervalId = setInterval(()=>{

  let currentHeight = document.body.scrollHeight;

  if(currentHeight === window.height){

  equalNum++;

  if(equalNum === 2){

  clearInterval(window.intervalId);

  window.checkBottom = true;

  }

  }else{

  window.height = currentHeight;

  window.scrollTo(0,window.height);

  window.scrollTo(0,window.height-1000);

  }

  },1500)"""

  # 这个暂停一下是因为要等待页面将下面的内容加载出,这个 1500 可以根据自己的网络快慢进行适当的调节

  # 这里需要往上移动一下,因为不往上移动一下发现不会加载。

  driver.execute_script(js)

  # selenium 可以获取 浏览器中 js 的变量。调用的js return

  def getHeight(nice):

  # 这里获取 js 中的 checkBottom 变量,作为到底部时进行停止。

  js = """

  return window.checkBottom;

  """

  return driver.execute_script(js)

  try:

  # 先触发登陆弹窗。

  WebDriverWait(driver, 40, 1).until(EC.presence_of_all_elements_located(

  (By.CLASS_NAME, 'Modal-backdrop')), waitFun())

  # 点击空白关闭登陆窗口

  ac = driver.find_element_by_xpath('//body/div[4]/div[1]/div[1]/div[1]/div[2]/button[1]/*[1]')

  ActionChains(driver).move_to_element(ac).double_click(ac).perform()

  # 当滚动到底部时

  WebDriverWait(driver, 40, 3).until(getHeight, waitFun())

  # 获取回答

  answerElementArr = driver.find_elements_by_css_selector('.RichContent-inner') # .List-item

  # 获取id

  idElementArr = driver.find_elements_by_css_selector('div.AuthorInfo-head > span.UserLink') # .List-item

  # 获取日期

  dateElementArr = driver.find_elements_by_css_selector('.ContentItem-time') # .List-item

  # 获取标题

  title = driver.find_element_by_class_name('QuestionHeader-title')

  filename = title.text

  # 创建list

  a = []

  b = []

  c = []

  # id写入

  for uid in idElementArr:

  a.append(uid.text)

  # 答案写入

  for answer in answerElementArr:

  b.append(answer.text)

  # date写入

  for date in dateElementArr:

  c.append(date.text)

  # 将列表转换成字典

  d = {"id": a, "answer": b, "date": c}

  # 创建 Dataframe

  dateframe = DataFrame(d)

  # 到出 csv文件

  dateframe.to_csv("./{}.csv".format(title.text),index=False)

  print(len(answerElementArr))

  print(len(idElementArr))

  print(len(dateElementArr))

  print('爬取问题 ' + title.text + str(len(answerElementArr)) + ' 条,存入到csv文件中')

  finally:

  driver.close() # close the driver

  这套代码是在python 使用 selenium 爬虫知乎的基础上进行了完善,将自动关闭登陆窗的机制改为xpath定位元素双击,然后自动向下滑动,并将结果以csv的形式写入方便以后进行数据处理。

  以上内容为大家介绍了自动化测试中的然后使用 selenium爬虫知乎回答,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部