我目前正在使用selenium webdriver来解析Facebook用户朋友页面并从AJAX脚本中提取所有ID。但我需要向下滚动才能吸引所有朋友。如何在Selenium中向下滚动。我正在使用python。
答案 0 :(得分:165)
您可以使用
driver.execute_script("window.scrollTo(0, Y)")
其中Y是高度(在fullhd监视器上它是1080)。 (感谢@lukeis)
您也可以使用
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
滚动到页面底部。
如果你想要 scrool到无限加载的页面,比如社交网络,facebook等(感谢@Cong Tran)
SCROLL_PAUSE_TIME = 0.5
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
答案 1 :(得分:57)
如果您想向下滚动到无限页面的底部(例如strptime
),您可以使用以下代码:
'Food' =>
array (size=4)
'_id' =>
object(MongoId)[36]
public '$id' => string '587e4a89974711036c97d3e5' (length=24)
'CaseId' => string 'c002' (length=4)
'Level' => string '4' (length=1)
'food' => string 'banana' (length=6)
参考:linkedin.com
答案 2 :(得分:18)
答案 3 :(得分:12)
from selenium.webdriver.common.keys import Keys
html = browser.find_element_by_tag_name('html')
html.send_keys(Keys.END)
经过测试,可以正常工作
答案 4 :(得分:11)
element=find_element_by_xpath("xpath of the li you are trying to access")
element.location_once_scrolled_into_view
当我试图访问' li'那是不可见的。
答案 5 :(得分:4)
这是您向下滚动网页的方式:
driver.execute_script("window.scrollTo(0, 1000);")
答案 6 :(得分:4)
这些答案都不适用于我,至少不是为了向下滚动Facebook搜索结果页面,但我在经过大量测试后找到了这个解决方案:
while driver.find_element_by_tag_name('div'):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Divs=driver.find_element_by_tag_name('div').text
if 'End of Results' in Divs:
print 'end'
break
else:
continue
答案 7 :(得分:3)
我找到解决该问题的最简单方法是选择一个标签,然后发送:
label.sendKeys(Keys.PAGE_DOWN);
希望它有效!
答案 8 :(得分:2)
出于我的目的,我想向下滚动更多,同时牢记窗口的位置。我的解决方案与此类似,并且使用了window.scrollY
driver.execute_script("window.scrollTo(0, window.scrollY + 200)")
它将转到当前的y滚动位置+ 200
答案 9 :(得分:2)
ScrollTo()
函数不再起作用。这是我使用的,效果很好。
driver.execute_script("document.getElementById('mydiv').scrollIntoView();")
答案 10 :(得分:1)
我一直在寻找一种滚动浏览动态网页的方法,并在到达页面末尾并找到该线程时自动停止。
@Cuong Tran的帖子进行了主要修改,是我一直在寻找的答案。我认为其他人可能会发现此修改很有用(它对代码的工作方式有明显影响),因此,本文发布了。
修改是将捕获最后一页高度的语句移到循环内 (以便使每张支票都与上一页高度进行比较)。
因此,下面的代码:
连续向下滚动动态网页(
.scrollTo()
),仅在一次迭代中页面高度保持不变时停止。
(还有另一种修改,其中break语句位于可以删除的另一种情况下(如果页面为“ sticks”))。
SCROLL_PAUSE_TIME = 0.5
while True:
# Get scroll height
### This is the difference. Moving this *inside* the loop
### means that it checks if scrollTo is still scrolling
last_height = driver.execute_script("return document.body.scrollHeight")
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
# try again (can be removed)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
# check if the page height has remained the same
if new_height == last_height:
# if so, you are done
break
# if not, move on to the next loop
else:
last_height = new_height
continue
答案 11 :(得分:1)
滚动加载页面。示例:中,定额等
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight-1000);")
# Wait to load the page.
driver.implicitly_wait(30) # seconds
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# sleep for 30s
driver.implicitly_wait(30) # seconds
driver.quit()
答案 12 :(得分:1)
如果要在特定的视图/框架中滚动(strong)(WebElement),只需将“ body”替换为要在其中滚动的特定元素。我在下面的示例中通过“ getElementById”获得该元素:
self.driver.execute_script('window.scrollTo(0, document.getElementById("page-manager").scrollHeight);')
在 YouTube 上就是这种情况,例如...
答案 13 :(得分:1)
这是示例硒代码段,您可以将其用于这种目的。它会转到“枚举python教程”上youtube搜索结果的网址,并向下滚动,直到找到标题为“枚举python教程(2020)”的视频。
driver.get('https://www.youtube.com/results?search_query=enumerate+python')
target = driver.find_element_by_link_text('Enumerate python tutorial(2020).')
target.location_once_scrolled_into_view
答案 14 :(得分:1)
插入这一行driver.execute_script("window.scrollBy(0,925)", "")
答案 15 :(得分:0)
此代码滚动到底部,但不需要您每次都等待。它会不断滚动,然后停在底部(或超时)
Basic usage (Use @ionic-native/google-maps@4.8.2)
import {
GoogleMaps,
GoogleMap,
GoogleMapsEvent,
GoogleMapOptions,
CameraPosition,
MarkerOptions,
Marker,
Environment
} from '@ionic-native/google-maps';
import { Component } from "@angular/core/";
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
map: GoogleMap;
constructor() { }
ionViewDidLoad() {
this.loadMap();
}
loadMap() {
// This code is necessary for browser
Environment.setEnv({
'API_KEY_FOR_BROWSER_RELEASE': '(your api key for `https://`)',
'API_KEY_FOR_BROWSER_DEBUG': '(your api key for `http://`)'
});
let mapOptions: GoogleMapOptions = {
camera: {
target: {
lat: 43.0741904,
lng: -89.3809802
},
zoom: 18,
tilt: 30
}
};
this.map = GoogleMaps.create('map_canvas', mapOptions);
let marker: Marker = this.map.addMarkerSync({
title: 'Ionic',
icon: 'blue',
animation: 'DROP',
position: {
lat: 43.0741904,
lng: -89.3809802
}
});
marker.on(GoogleMapsEvent.MARKER_CLICK).subscribe(() => {
alert('clicked');
});
}
}
这比每次等待0.5-3秒等待响应要快得多,因为响应可能需要0.1秒
答案 16 :(得分:0)
driver.execute_script("document.getElementById('your ID Element').scrollIntoView();")
它适合我的情况。
答案 17 :(得分:0)
您可以使用 send_keys 来模拟 PAGE_DOWN 键(通常会滚动页面):
from selenium.webdriver.common.keys import Keys
html = driver.find_element_by_tag_name('html')
html.send_keys(Keys.PAGE_DOWN)