继续上一篇:
橘猫吃不胖:Python+Selenium使用(一)zhuanlan.zhihu.com
上一篇,获取了百度搜索后的结果页面,但是搜索结果又很多页,这里就获取下一页按钮,并点击它。
现在浏览器上,找到下一页按钮:
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去找,但是一直找不到
后来改了这个page_inner就可以了
然后,就想多点几次,但是好像哪里有问题,只在第一页、第二页切换
flag = 1
while flag<10:btn &#61; driver.find_element_by_css_selector(&#39;div.page-inner > a.n&#39;)print(btn.get_property(&#39;href&#39;)) btn.click()time.sleep(random.randint(1,9)) flag &#43;&#61; 1
看了下HTML
当切换到下一页的时候&#xff0c;上一页的class也是n
然后&#xff0c;换了一下选择器的写法
flag &#61; 1
while flag<10:btn &#61; driver.find_element_by_css_selector(&#39;a.n:last-child&#39;)print(btn.text, &#39;:&#39;, btn.get_property(&#39;href&#39;)) btn.click()time.sleep(random.randint(5,9)) flag &#43;&#61; 1
这下就可以了
关于选择器可以看看这个&#xff1a;CSS 选择器参考手册
现在是这样子的&#xff0c;每次页面更新后&#xff0c;我是手工滑动到页面的最下面&#xff0c;看页面切换是否一致
有点儿麻烦&#xff0c;如果可以自动滑动到下面就好了
滚动页面
selenium中没有直接操作页面滚动的方法&#xff0c;但是我们可以通过调用JS的方式来实现
driver.execute_script(&#39;window.scrollBy(0,200)&#39;)
这样就可以滚动200个单位&#xff0c;应该是像素
当然&#xff0c;也可以让页面滚动到我们想要看到的元素那里
btn &#61; driver.find_element_by_css_selector(&#39;a.n:last-child&#39;)driver.execute_script("arguments[0].scrollIntoView();",btn)
上面&#xff0c;我们获取了“下一页”按钮&#xff0c;这里&#xff0c;可以直接滚动到“下一页”按钮可见
让页面滚动&#xff0c;还有一个原因&#xff0c;现在很多页面都是动态加载&#xff0c;如果你的页面不滚动&#xff0c;某些元素就不会加载出来&#xff0c;直接去定位的话&#xff0c;也找不到这个元素
所以&#xff0c;才会需要页面来滚动
除了上面说的按照像素来滚动&#xff0c;滚动到某元素可见&#xff0c;还可以直接根据页面的高度来滚动
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
如果页面动态加载&#xff0c;高度不断变化&#xff0c;这里可能还会有问题&#xff0c;这里后面具体场景再确认一下