【项目介绍】
之前用selenium爬当当网的信息,已经基本掌握一些selenium的用法,这次尝试用同样的方法爬京东商城,过程中出现很多问题:比如总是超时(特别是查找按钮节点element_to_be_clickable和对比文本节点text_to_be_present_in_element),比如商品信息有60个但只能加载到30个……借鉴网上的做法完成了项目,但是对于一些节点总是超时还是不能理解,猜测可能是网络的问题……
【项目工具】
Pycharm+selenium+webdriver
【项目流程】
1.访问京东商城,模拟输入ipad并点击搜索
2.进入ipad商品搜索页第一页,添加显式等待,等待当前页数和商品信息均加载出来。
3.获取html并利用正则表达式匹配商品信息,这里用sub方法多次匹配从而删减无关html节点。
4.执行循环,模拟点击下一页。
5.执行等待,等待包括三十个商品的等待和六十个商品的等待,以保证商品信息均能加载出来。加载成功则继续执行第三步。
附完整代码:
'''
项目介绍:爬京东网站商品信息。
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re,time,random
from selenium.common.exceptions import TimeoutException
def index_page(page):
print('现在加载第{}页'.format(page))
try:
#模拟拖动下滑条,拖至底部。
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(random.randint(1,3))
#input_button = wait.until(EC.presence_of_element_located((By.CLASS_NAME,'input-txt')))
submit_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.pn-next > em')))
#为什么就是超时呢??
#submit_button = browser.find_element_by_class_name('btn.btn-default')
#submit_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'a.btn.btn-default')))
#input_button.clear()
#input_button.send_keys(page)
submit_button.click()
#以下为网页加载的等待条件,>代表的是直接子节点
wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#J_goodsList > ul > li:nth-child(30)')))
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR,