在爬取某网站时,要根据页面上的选择页控件接着爬取下一个页面,但是控件中下一页的网址并没有直接给出来,而是形如这样的源码:3 其中的 queryListByPage 应该是点击“ 3 ”这个页码的方框时会触发的函数。我想用 selenium.webdriver 和 PhantomJS 来模拟点击页码并进入下一页面的动作,我写了如下的语句:
nextpageButton = driver.find_element_by_name(response.xpath('a/@click').extract())
nextpageButton.click()
我面临的问题如下:
1、上面的语句是否可以实现模拟点击下一页页码按钮的效果
2、如果上面语句可以模拟点击下一页,那么执行完毕后,是否还要有加载下一页面的动作?也就是说还要执行诸如 driver.get(下一页网址) 的语句?并且下一页面的网址要如何获取,有什么函数可以直接返回这个网址么?
恳请指点,感谢!
1
cdwyd 2017-09-22 21:09:41 +08:00 via Android
手动点一下看看真正的请求是什么去抓就行
|
2
brightguo 2017-09-22 21:12:45 +08:00
0.应该是的
1.不需要再 get 2.如果能 get 何必要虚拟点击,囧~ |
3
saximi OP @brightguo 不知为何,我的部分代码没有正确显示出来,我重新贴一下我的完整问题吧。
在爬取某网站时,要根据页面上的选择页控件接着爬取下一个页面,但是控件中下一页的网址并没有直接给出来,而是形如这样的源码:<a onclick="queryListByPage('3')">3</a> 其中的 queryListByPage 应该是点击“ 3 ”这个页码的方框时会触发的函数。我想用 selenium.webdriver 和 PhantomJS 来模拟点击页码并进入下一页面的动作,我写了如下的语句: nextpageButton = driver.find_element_by_name(response.xpath('a/@onclick').extract()) nextpageButton.click() 我面临的问题如下: 1、上面的语句是否可以实现模拟点击下一页页码按钮的效果 2、如果上面语句可以模拟点击下一页,那么执行完毕后,是否还要有加载下一页面的动作?也就是说还要执行诸如 driver.get(下一页网址) 的语句?并且下一页面的网址要如何获取,有什么函数可以直接返回这个网址么? |
4
saximi OP @brightguo 假如 nextpageButton.click() 这个语句就等同于 driver.get(下一页网址) 这个语句的效果,那么请问,包含下一个页面内容的对象是什么? 应该不是 response 了吧?
|
5
brightguo 2017-09-24 11:02:31 +08:00
1.那部分内容可能是 js 渲染的,你得等待一会----可以用个循环( time.sleep(1)一直检测那个元素出来没,出来了再做后面解析
2.nextpageButton 我没那么写过,我最多直接用 driver.find_element_by_xpath,你那么套我不清楚找的对不对 3.及时模拟点击了,后面有些内容可能也要睡一会才出现的(重新获取 driver.page_source ) 4.极力请使用 ChromeDriver,可以直接看到界面----每句语句的效果。phantomjs 已经没人维护了~ |
6
saximi OP @brightguo 用 phantomJS 是为了起到无界面浏览器的效果,不知 ChromeDriver 可以起到同样效果么?
|
7
dsg001 2017-09-24 19:00:15 +08:00
nextpageButton = driver.find_element_by_xpath('a/@onclick')
nextpageButton.click() 如果是 ajax 加载,则 time.sleep(10) phantomJS 已经被放弃了,chrome 60 以上的版本支持 headless 模式,可以在调试时使用界面,生产时使用 headless |
8
Marsss 2017-09-29 08:53:40 +08:00
import pdb
pdb.set_trace() |