python+selenium爬虫过程中的模拟点击问题

题目描述

下拉菜单选项无法提取成列表以及不能够被点击,请帮忙分析看一下什么原因

题目来源及自己的思路

对于app移动掌上营业厅抓包后,PC端的爬虫过程。
第一步:进入首页,点击"更多”

clipboard.png
clipboard.png

第二步:下拉“全部”菜单(原以为“全部”这个元素为按钮,编写的程序不能进行点击)

clipboard.png

第三步:遍历这个城市的各个区域,对各区域营业厅的名称、地址、电话进行信息爬取(还需遍历点击“进店逛逛”这个元素才能进入信息界面,该功能通过模拟点击可以实现)

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

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)而终止进程。

clipboard.png
2.目前能够执行到如图所示界面,就是能够进行两次点击跳转,在选取区域这边遇到瓶颈无法解决:

clipboard.png

clipboard.png
后续代码再进行补充,望指点!

阅读 6.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题