![f62d9923bdc278d8249fd9a78de576cb.png](https://i-blog.csdnimg.cn/blog_migrate/8cc6c1eb391f8c07559c3ad0b262b7a0.jpeg)
继续上一篇:
橘猫吃不胖:Python+Selenium使用(一)zhuanlan.zhihu.com![e5442e3200bbad1c6624f31f6da7c05d.png](https://i-blog.csdnimg.cn/blog_migrate/94076d0ee755d008bcf4aa3989171034.jpeg)
上一篇,获取了百度搜索后的结果页面,但是搜索结果又很多页,这里就获取下一页按钮,并点击它。
现在浏览器上,找到下一页按钮:
![bb509656b7b69e7d966b953c77b968b7.png](https://i-blog.csdnimg.cn/blog_migrate/2be450b2dfd676c58d8e14e64abfc87b.jpeg)
btn = driver.find_element_by_css_selector('div.page-inner > a.n')
print(btn.get_property('href'))
btn.click()
这里,就是用css来定位了“下一页”按钮,运行后,就可以看到自动切换到了下一页
顺便记录一个问题,就是css selector,貌似不能跨层级,“div.page-inner > a.n”
一开始想用div的id去找,但是一直找不到
![b5a2bb2d4535f951f7272c0640ab5ce9.png](https://i-blog.csdnimg.cn/blog_migrate/747316d6c2f6e5829b3049de2ef25323.jpeg)
后来改了这个page_inner就可以了
然后,就想多点几次,但是好像哪里有问题,只在第一页、第二页切换
flag = 1
while flag<10:
btn = driver.find_element_by_css_selector('div.page-inner > a.n')
print(btn.get_property('href'))
btn.click()
time.sleep(random.randint(1,9))
flag += 1
看了下HTML
![f9c77bc1982e439042f29ade97539065.png](https://i-blog.csdnimg.cn/blog_migrate/fcca70eb91fe58f7898625f097639094.jpeg)
当切换到下一页的时候,上一页的class也是n
![0ba5728be7b087b41aa3e111c0b2b43c.png](https://i-blog.csdnimg.cn/blog_migrate/f9fa5a6e00a1ab46695814c1d94fd628.png)
然后,换了一下选择器的写法
flag = 1
while flag<10:
btn = driver.find_element_by_css_selector('a.n:last-child')
print(btn.text, ':', btn.get_property('href'))
btn.click()
time.sleep(random.randint(5,9))
flag += 1
这下就可以了
关于选择器可以看看这个:CSS 选择器参考手册
现在是这样子的,每次页面更新后,我是手工滑动到页面的最下面,看页面切换是否一致
有点儿麻烦,如果可以自动滑动到下面就好了
滚动页面
selenium中没有直接操作页面滚动的方法,但是我们可以通过调用JS的方式来实现
driver.execute_script('window.scrollBy(0,200)')
这样就可以滚动200个单位,应该是像素
当然,也可以让页面滚动到我们想要看到的元素那里
btn = driver.find_element_by_css_selector('a.n:last-child')
driver.execute_script("arguments[0].scrollIntoView();",btn)
上面,我们获取了“下一页”按钮,这里,可以直接滚动到“下一页”按钮可见
![3476bd2ff9b0769488ca4b76a06a77ca.png](https://i-blog.csdnimg.cn/blog_migrate/95bd5b6bbd3992384c5d13f97f4f7342.jpeg)
让页面滚动,还有一个原因,现在很多页面都是动态加载,如果你的页面不滚动,某些元素就不会加载出来,直接去定位的话,也找不到这个元素
所以,才会需要页面来滚动
除了上面说的按照像素来滚动,滚动到某元素可见,还可以直接根据页面的高度来滚动
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
![1c15d53e8202c91f7407252c99fb3010.png](https://i-blog.csdnimg.cn/blog_migrate/b0e14035aedf71a09012efd688f644bd.jpeg)
如果页面动态加载,高度不断变化,这里可能还会有问题,这里后面具体场景再确认一下