美文网首页
用selenium操作网易云音乐!

用selenium操作网易云音乐!

作者: 干吃 | 来源:发表于2020-07-15 14:59 被阅读0次

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器,也包括PhantomJS这些无界面的浏览器。

Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用,所以需要浏览器驱动,以便selenium操作浏览器。

安装webdriver

各大浏览器的webdriver地址如下:

Firefox:https://github.com/mozilla/geckodriver/releases/

Chrome:http://chromedriver.storage.googleapis.com/index.html

IE:http://selenium-release.storage.googleapis.com/index.html

注意:webdriver需要和对应的浏览器版本以及selenium版本对应

下载webdriver后拷贝至:

Win:复制webdriver到Python安装目录下

Mac:复制webdriver到/usr/local/bin目录下

也可以放在别出,实例对象时使用executable_path=‘’指定位置

好了,准备工作差不多了,开始怼,遇到问题再解决。

代码:

from selenium importwebdriver

from selenium.webdriver.common.keys import Keys

import time

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditionsas EC

browser = webdriver.Chrome()

browser.get(

'https://music.163.com')

# browser.set_window_size(1024,768) # 设置窗口尺寸browser.maximize_window()# 全屏

#

设置全局的隐式等待(直到找到元素),10秒后找不到抛出找不到元素browser.implicitly_wait(10)

# 显式等待找到元素id=g_nav2, 0.5秒巡查一次,5秒超时echoobj =WebDriverWait(browser,5,0.5).until(EC.visibility_of_element_located((By.ID,'g_nav2')))

time.sleep(1)

# 截取当前屏幕browser.get_screenshot_as_file('./v.png')

# 仅截echoobj对象的范围,定点元素截图echoobj.screenshot('./p.png')

print('元素大小:',echoobj.size) # g_nav2元素大小print('元素是否显示:',echoobj.is_displayed()) # True 显示,False 隐藏print(browser.title)

print(browser.current_url)# 当前URL

print('窗口句柄:',browser.current_window_handle)

# 点击按钮browser.find_element_by_css_selector('.link.s-fc3').click()

# time.sleep(1)

browser.find_element_by_css_selector('.u-btn2.other').click()

# time.sleep(1)

browser.find_element_by_id('j-official-terms').click()

# time.sleep(1)

browser.find_element_by_css_selector('.u-btn2.u-btn2-2').click()

# time.sleep(1)

#

登录手机号账户browser.find_element_by_id('p').send_keys('user name')

browser.find_element_by_id('pw').send_keys('password')

browser.find_element_by_css_selector('.j-primary.u-btn2.u-btn2-2').click()

browser.refresh() # 刷新页面

#

点击排行榜browser.find_element_by_css_selector('#g_nav2 > div > ul >

li:nth-child(2) > a').click()

# 切到id=g_iframe的iframe,以便播放歌曲browser.switch_to.frame('g_iframe')

time.sleep(1)

browser.find_element_by_css_selector(".u-btn2.u-btn2-2.u-btni-addply.f-fl").click() # 播放time.sleep(10)

# 切换到上一层,跳出当前iframe,因为当前只有一个主 html和一个嵌套iframe,挑出后回到主html

browser.switch_to.parent_frame()

# browser.switch_to.default_content() # 切到主HTML

#

搜索歌曲,播放bs =browser.find_element_by_id('srch')

bs.send_keys('海底')

# 键盘回车操作bs.send_keys(Keys.ENTER)

browser.switch_to.frame('g_iframe')

#

browser.find_element_by_id('song_1426649237').click() # 功能同下browser.find_element_by_class_name('ply').click()

time.sleep(10)

browser.quit()

打开网易云音乐,手机号登录,播放排行榜歌曲,再搜索歌曲播放,最后关闭网页,大概就这些操作流程,需要注释的在代码内都有。

下面是常用的元素定位及操作:

元素定位:

              #通过id方式定位

              browser.find_element_by_id("kw")

              #通过name方式定位

              browser.find_element_by_name("wd")

              #通过tag name方式定位

              browser.find_element_by_tag_name("input")

              #通过class name方式定位

              browser.find_element_by_class_name("s_ipt")

             #多个class name定位

              browser.find_element_by_css_selector(".class1.class2")

              #通过CSS方式定位

              browser.find_element_by_css_selector("#kw")

              #通过xpath方式定位

              browser.find_element_by_xpath("//input[@id='kw']")

操作对象:

              click():点击对象

              send_keys(“input”):在对象上模拟按键输入

              clear():清除对象的内容

              submit():提交对象的内容

              text:用于获取元素的文本信息

              get_attribute("href"):获取标签的某值

键盘操作:

              fromselenium.webdriver.common.keys import Keys

              send_keys(Keys.TAB):tab

              send_keys(Keys.ENTER):回车

              send_keys(Keys.CONTROL,'a'):全选,ctrl+a

可以使用dir(Keys)查看支持哪些键盘操作,help(Kesys)查看使用方法。

鼠标操作:

              fromselenium.webdriver.common.action_chains import ActionChains

              ActionChains常用方法:

              perform():执行所有ActionChains 中存储的行为;

              context_click():右击;

              double_click():双击;

              drag_and_drop():拖动;

              move_to_element():鼠标悬停。

同上也可以使用dir(),help()方法。

截图方法:

              bobj.screenshot(''):仅截bobj对象的范围,定点元素截图

              get_screenshot_as_file(''):截图屏幕

              get_screenshot_as_base64(‘’):截图屏幕,base64格式

              get_screenshot_as_png(‘‘ ):截图屏幕,二进制格式

浏览器的前进后退:

              forward():前进

              back():后退

注意:如果出现找不到定位元素的错误,首先先检查该元素是否在iframe块内,如果在需要切入iframe内定位元素(switch_to.frame('iframe_id')),示例代码有使用。

示例代码运行时会打开浏览器,但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器要高效。这里不做详细说明,有兴趣的可以自行研究一下。

相关文章

网友评论

      本文标题:用selenium操作网易云音乐!

      本文链接:https://www.haomeiwen.com/subject/yfadhktx.html