Auth: 王海飞
Data:2018-06-20
Email:779598160@qq.com
github:https://github.com/coco369/knowledge
使用selenium去模拟浏览器的行为去登陆知乎,需要清楚登陆页面中的输入用户名和密码,还有登陆按钮的样式,这样selenium才能通过样式id或者class去获取到该按钮,进行相关的填入用户信息和提交的操作
from selenium import webdriver
import time
# 创建浏览器对象
chromedriver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver'
browser=webdriver.Chrome(chromedriver)
# 请求加载登录链接
browser.get('https://www.zhihu.com/signin')
time.sleep(3)
# 输入账号
browser.find_element_by_css_selector("input[name='username']").send_keys('17078075655')
# 输入密码
browser.find_element_by_css_selector("input[name='password']").send_keys('19910825580lb')
# 模拟点击登录
browser.find_element_by_css_selector(".SignFlow-submitButton").click()
time.sleep(3)
# 截图
browser.save_screenshot("zhihu.png")
browser.quit()
小结:输入文字用send_keys()方法,清空文字用clear()方法,另外还有按钮点击,用click()方法
简单的:
from bs4 import BeautifulSoup
from selenium import webdriver
def main():
chromedriver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver'
driver = webdriver.Chrome(chromedriver)
driver.get('https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0')
soup = BeautifulSoup(driver.page_source, 'lxml')
for img_tag in soup.body.select('img[src]'):
print(img_tag.attrs.get('src'))
print(img_tag.attrs.get('alt'))
if __name__ == '__main__':
main()
升级:
模拟打开浏览器的页面,并且滑动滚动条到底部,进行点击加载更多电影的按钮,循环多次去加载,最后获取网页的源码信息
import time
from selenium import webdriver
def more_movie(browser):
try:
time.sleep(3)
# 滚动条到底部
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 模拟点击豆瓣加载电影的案例
browser.find_element_by_xpath('//*[@id="content"]/div/div[1]/div/div[4]/a').click()
time.sleep(3)
except:
print('到底了')
def scroll_douban():
chromedriver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver'
browser = webdriver.Chrome(chromedriver)
browser.get('https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0')
# 滚动条到底部
# browser.execute_script('document.documentElement.scrollTop=10000')
# 滚动条到顶部
# browser.execute_script('document.documentElement.scrollTop=0')
# 循环3次去加载电影的数据
for i in range(3):
more_movie(browser)
# 回滚到顶部
browser.execute_script("window.scrollTo(0,0)")
# 打印网页的源码
print(browser.page_source)
# 关闭浏览器的窗口
browser.close()
if __name__ == '__main__':
scroll_douban()