题目描述
下拉菜单选项无法提取成列表以及不能够被点击,请帮忙分析看一下什么原因
题目来源及自己的思路
对于app移动掌上营业厅抓包后,PC端的爬虫过程。
第一步:进入首页,点击"更多”
第二步:下拉“全部”菜单(原以为“全部”这个元素为按钮,编写的程序不能进行点击)
第三步:遍历这个城市的各个区域,对各区域营业厅的名称、地址、电话进行信息爬取(还需遍历点击“进店逛逛”这个元素才能进入信息界面,该功能通过模拟点击可以实现)
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
import scrapy
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
from YDapp.items import YdappItem
class YdNjSpider(scrapy.Spider):
name = 'YD_NJ'
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
# }
def start_requests(self):
# 省内13个大市营业厅主页列表
urls =[
"https://wap.js.10086.cn/zzd/newMap/ininMap?latY=31.311746&lngX=120.620912&cityCode=11"
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def __init__(self):
self.browser = webdriver.Chrome()
self.wait = WebDriverWait(self.browser, 10)
# def closed(self, spider):
# print("spider closed")
# self.browser.close()
def parse(self, response):
self.browser.get(response.url)
#print(response.url)
print(self.browser.page_source)
#查看标签是否被隐藏(首页营业厅信息)
yytinfo=self.browser.find_element_by_css_selector('#yytInfo')
# 如果输出为FALSE就是被隐藏
print(yytinfo.is_displayed())
# 确认“更多”元素是否加载
input = self.wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#infoTab1 > div.index-more > a'))
)
#查看是否能够被点击
submit = self.wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#infoTab1 > div.index-more > a'))
)
#点击
submit.click()
# 阶段性反馈
print('ok')
#输出该页源码,此处存在跳转更多页面不稳定的情况
# 等待跳转页面内容加载
input1 = self.wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'body > div > div.index-box > div'))
)
print(self.browser.page_source)
#以上代码执行没有问题,主要是下面
# 必须确认该页所有“区域”名单是否加载,“全部”按键从JS代码中发现实际不需要点击,故直接嵌套式遍历区域按钮并进行点击
submit1 = self.wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'li[name = "cityAreaId"]'))
)
#查找所有标签为[li],name=cityAreaId的内容放入列表Regions
Regions = self.wait.until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'li[name = "cityAreaId"]'))
)
#输出查看,此处报错
print(Regions)
你期待的结果是什么?实际看到的错误信息又是什么?
遇到的问题:
1.有时候模拟打开浏览器的过程中会遇到如下图的情况,左下角出现JavaScript.void(0)而终止进程。
2.目前能够执行到如图所示界面,就是能够进行两次点击跳转,在选取区域这边遇到瓶颈无法解决:
后续代码再进行补充,望指点!