查看: 2660|回复: 15
收起左侧

[网络] selenium+firefox爬取网易云如何点击下一页按钮

[复制链接]
xzykgc4mc3
发表于 2018-8-14 17:11:27 | 显示全部楼层 |阅读模式
本帖最后由 xzykgc4mc3 于 2018-8-14 22:13 编辑

具体代码如下。
@詩、未詺 @ericdj @翼风Fly @genius2k @jasake
大概想法是这样,访问网易云音乐,然后,在搜索框键入“神话”,按回车,然后得到搜索结果的歌曲总数,底下有个下一页的按钮。等待按钮可点击状态,然后点击下一页。结果跳出的火狐浏览器并不会点击下一页按钮。是哪里错了。请各位大大指正。
下一页按钮,我是这么定位的,应该没错吧。但就是不能点击
  1. next_page_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[contains(@class, "u-page")]/a[contains(@class, "znxt")]')))
  2. next_page_button.click()
复制代码
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.support import expected_conditions as EC

  6. browser = webdriver.Firefox()
  7. browser.get('https://music.163.com/')
  8. wait = WebDriverWait(browser, 10)
  9. input = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="srchbg"]//input[@id="srch"]')))
  10. input.clear()
  11. input.send_keys('神话')
  12. input.send_keys(Keys.ENTER)
  13. browser.switch_to.frame('contentFrame')
  14. songs_num_node = wait.until(EC.presence_of_element_located((By.XPATH, '//div[contains(@class, "snote")]')))
  15. next_page_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[contains(@class, "u-page")]/a[contains(@class, "znxt")]')))
  16. next_page_button.click()
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 1人气 +3 收起 理由
ericdj + 3 大……大佬

查看全部评分

jasake
发表于 2018-8-14 19:59:48 | 显示全部楼层
xzykgc4mc3 发表于 2018-8-14 17:11
具体代码如下。
@詩、未詺 @ericdj @翼风Fly @genius2k @jasake
大概想法是这样,访问网易云音乐,然后 ...

这里有个坑,按钮在一个 frame 里面,应该要先切换吧

评分

参与人数 1人气 +3 收起 理由
xzykgc4mc3 + 3 感谢解答: )

查看全部评分

xzykgc4mc3
 楼主| 发表于 2018-8-14 20:14:20 | 显示全部楼层
jasake 发表于 2018-8-14 19:59
这里有个坑,按钮在一个 frame 里面,应该要先切换吧

谢谢大侠。我上面这行代码正是切换了frame了。难道还有再嵌了一个frame。不是很懂
browser.switch_to.frame('contentFrame')
jasake
发表于 2018-8-14 20:29:09 | 显示全部楼层
xzykgc4mc3 发表于 2018-8-14 20:14
谢谢大侠。我上面这行代码正是切换了frame了。难道还有再嵌了一个frame。不是很懂
browser.switch_to.frame('contentFrame')

是这个,刚才没看清楚
xzykgc4mc3
 楼主| 发表于 2018-8-14 21:18:09 | 显示全部楼层
jasake 发表于 2018-8-14 20:29
是这个,刚才没看清楚

不过,切换之后,还是按不了下一页的按钮。
jasake
发表于 2018-8-14 21:55:22 | 显示全部楼层
xzykgc4mc3 发表于 2018-8-14 21:18
不过,切换之后,还是按不了下一页的按钮。

frame 是不是也有延迟,也要等:
frame_to_be_available_and_switch_to_it
xzykgc4mc3
 楼主| 发表于 2018-8-14 22:09:46 | 显示全部楼层
jasake 发表于 2018-8-14 21:55
frame 是不是也有延迟,也要等:
frame_to_be_available_and_switch_to_it
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.support import expected_conditions as EC

  6. browser = webdriver.Firefox()
  7. browser.get('https://music.163.com/')
  8. wait = WebDriverWait(browser, 10)
  9. input = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="srchbg"]//input[@id="srch"]')))
  10. input.clear()
  11. input.send_keys('神话')
  12. input.send_keys(Keys.ENTER)
  13. browser.switch_to.frame('contentFrame')
  14. songs_num_node = wait.until(EC.presence_of_element_located((By.XPATH, '//div[contains(@class, "snote")]')))
  15. print(songs_num_node.text)
  16. next_page_button = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[contains(@class, "u-page")]/a[contains(@class, "znxt")]')))
  17. next_page_button.click()
复制代码
我在切换browser.switch_to.frame('contentFrame')后,print(songs_num_node.text)打印出歌曲数量。这个节点也是在frame里的。能够成功打印。但就是下一页按钮不能根据next_page_button.click()点击



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
ericdj
发表于 2018-8-15 08:55:44 | 显示全部楼层

不会啊,还没学会爬虫……

评分

参与人数 1人气 +3 收起 理由
xzykgc4mc3 + 3 大佬这阵子在捣腾什么

查看全部评分

翼风Fly
发表于 2018-8-16 00:20:57 | 显示全部楼层
抱歉,暂时先提供另一个思路,
你应该去Network里找请求,而不是找按钮何时出现触发。等延迟挺烦人的

评分

参与人数 1人气 +1 收起 理由
xzykgc4mc3 + 1 感谢解答: )

查看全部评分

B100D1E55
发表于 2018-8-18 23:23:32 | 显示全部楼层
n年没用selenium了……不能用id么,比如你可以用chrome的selenium插件比如katalon recorder录制一下点button的events看看是怎么回事:
elements:



点下一页对应的events,发现click对应的是按钮对应的query id:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-4-24 07:25 , Processed in 0.135916 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表