from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time
b = Chrome()
b.get('https://search.jd.com/Search?keyword=%E7%94%B5%E9%A5%AD%E9%94%85&enc=utf-8&wq=%E7%94%B5%E9%A5%AD%E9%94%85&pvid=20d97125d00a409fb95d2735aeb0a7c6')
time.sleep(5)# ============== 用代码控制浏览器滚动 ==============# js中页面滚动的代码: window.scrollBy(x方向的偏移量, y方向的偏移量)# b.execute_script('scrollBy(0, 1000)')for x inrange(10):
b.execute_script('scrollBy(0, 1000)')
time.sleep(2)
time.sleep(5)
result = b.find_elements(By.CSS_SELECTOR,'#J_goodsList>ul>li')print(len(result))# 使用input()函数来阻止程序运行结束后,自动关闭浏览器input('结束: ')
5. 练习
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time
# 1. 创建浏览器对象
b = Chrome()# 2. 打开中国知网
b.get('https://www.cnki.net/')# 3. 获取输入框标签对象,输入"数据分析"
search = b.find_element(By.ID,'txt_SearchText')
search.send_keys('数据分析\n')
time.sleep(2)# 4. 获取这一页搜索结果中所有论文的标题标签
titles = b.find_elements(By.CLASS_NAME,'fz14')# 点击第一个搜索结果
titles[0].click()
time.sleep(2)# 切换选项卡,让浏览器对象指向这篇论文的详情页# b.window_handles - 获取浏览器对象的当前所有的选项卡,结果是一个列表,列表里面的元素是选项卡对象
b.switch_to.window(b.window_handles[-1])# 获取详情页数据print(b.page_source)# 关闭当前窗口,即关闭该选项卡
b.close()# 将选项卡切换回第一个页面
b.switch_to.window(b.window_handles[0])# 点击第二个搜索结果
titles[1].click()
time.sleep(2)input('结束: ')
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time
# 1. 创建浏览器对象
b = Chrome()# 2. 打开中国知网
b.get('https://www.cnki.net/')# 3. 获取输入框标签对象,输入"数据分析"
search = b.find_element(By.ID,'txt_SearchText')
search.send_keys('数据分析\n')
time.sleep(5)# 3. 获取当前页搜索结果中所有论文的标题标签for page inrange(1,3):
titles = b.find_elements(By.CLASS_NAME,'fz14')
n =1for t in titles:
t.click()
time.sleep(5)# 切换选项卡,让浏览器对象指向详情页
b.switch_to.window(b.window_handles[-1])
summary = b.find_element(By.ID,'ChDivSummary')print(f'第{page}页--第{n}篇论文')print(summary.text)print()# 关闭当前窗口
b.close()# 将选项卡切换回第一个页面
b.switch_to.window(b.window_handles[0])
n +=1# 获取下一页按钮,并且点击
next_button = b.find_element(By.ID,'PageNext')
next_button.click()# 进行鼠标点击、滚动操作后,一定要写等待: time.sleep(5) ,不然大概率会报错
time.sleep(5)