Selenium在弹出式div中滚动

时间:2016-06-26 18:47:56

标签: python selenium screen-scraping

我正在使用selenium并尝试在Instagram上弹出窗口内滚动。

我访问了一个类似于' https://www.instagram.com/kimkardashian/'的页面,点击关注者,然后我就无法让关注者列表向下滚动。

我尝试使用悬停,click_and_hold和其他一些技巧来选择div,但没有一个有效。

选择此选项的最佳方式是什么?

这是我到目前为止所尝试的:

driver.find_elements_by_xpath("//*[contains(text(), 'followers')]")[0].click()
element_to_hover_over = driver.find_elements_by_xpath("//*[contains(text(), 'Follow')]")[12]
hover = ActionChains(webdriver).move_to_element(element_to_hover_over)
hover.click_and_hold()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

2 个答案:

答案 0 :(得分:2)

具体代码如下。您首先必须找到包含关注者姓名的新iframe:

scr1 = driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div/div[2]')
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scr1)

这将自动向下滚动页面,但您已为其进行for循环,直到它到达页面末尾。你可以看到我的Instagram抓取工具here

答案 1 :(得分:0)

您需要使用jQuery在div上执行函数。这就是我想要的方式。使用jQuery更容易解决它并执行脚本而不是使用api处理它。

height = 2000
query = 'jQuery("div").filter((i, div) => jQuery(div).css("overflow-y") == "scroll")[0].scrollTop = %s' %height
driver.execute_script(query)