【大壮老师救我】爬取手机端美团App,进入买药--->搜索框--->阿莫西林
来源:1-1 移动端python爬虫进阶实战-2020版导学

只是为了好玩
2023-02-20
需求:
1.美团买药主页面中,在搜索输入框中输入目标药品名称,点击搜索按钮,待搜索结果加载完成,依次获取搜索到的目标药品销售信息结果的药品名称信息
2.从解析药品名称信息,核对该药品是否为目标药品(包括厂商和药品名称)
3.若核对该药品不是目标药品,则跳过该药品,继续核对下一条搜索结果
4.若核对药品是目标药品,则点击该药品信息,进入药品销售详情页面,获取药品名称、规格、销售价格和药店名称信息,将获取到的药品销售信息保存到Excel文件中
我的代码实现:
# -*- coding: utf8 -*-
from appium import webdriver
# desired_caps 配置信息
desired_caps = {
"platformName": "Android",
"platformVersion": "9.0",
"deviceName": "8BN0217915008734",
"appPackage": "com.sankuai.meituan",
"appActivity": "com.meituan.android.pt.homepage.activity.MainActivity",
'unicodeKeyboard': True,
'resetKeyboard': True,
'noReset': True
}
# Appium 服务地址
# 初始化 Appium driver
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 连接远程设备
# 等待启动完成
driver.implicitly_wait(5)
print("打开美团App成功")
# 1点击“买药”入口 点击搜索框
drug_entry = driver.find_element_by_xpath('//android.view.View[@content-desc="买药"]')
drug_entry.click()
# 1点击搜索框
search_box = driver.find_element_by_id('com.sankuai.meituan:id/search_content_et')
# search_box = driver.find_element_by_xpath(
# "//android.widget.LinearLayout[@resource-id='com.sankuai.meituan:id/animte_action_search']")
search_box.click()
search_box.send_keys('阿莫西林')
# 点击搜索按钮
遇到的错误信息:
打开美团App成功
Traceback (most recent call last):
File "...\test\demo1726.py", line 31, in <module>
search_box = driver.find_element_by_id('com.sankuai.meituan:id/search_content_et')
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.
解决:不知道怎么办,卡了半天了,买了课,大壮老师教我。
我的完整代码:
# -*- coding: utf8 -*-
from appium import webdriver
import time
import openpyxl
# desired_caps 配置信息
desired_caps = {
"platformName": "Android",
"platformVersion": "9.0",
"deviceName": "8BN0217915008734",
"appPackage": "com.sankuai.meituan",
"appActivity": "com.meituan.android.pt.homepage.activity.MainActivity",
'unicodeKeyboard': True,
'resetKeyboard': True,
'noReset': True
}
# Appium 服务地址
# 初始化 Appium driver
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) #连接远程设备
# 等待启动完成
driver.implicitly_wait(3)
print("打开美团App成功")
# 点击“买药”入口
# drug_entry = driver.find_element_by_xpath('//android.widget.TextView[@text="买药"]')
drug_entry = driver.find_element_by_xpath('//android.view.View[@content-desc="买药"]')
drug_entry.click()
# 点击搜索框
search_box = driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.sankuai.meituan:id/tv_search_carousel_text_item_text']")
search_box.click()
# 输入药品名称
search_box.send_keys('阿莫西林')
# 点击搜索按钮
search_button = driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.sankuai.meituan:id/tv_search_carousel_text_item_text']")
search_button.click()
# 等待搜索结果加载完成
time.sleep(5)
# 获取搜索结果中药品名称信息
elements = driver.find_elements_by_id('com.sankuai.meituan:id/tv_goods_name')
# 遍历搜索结果,获取销售信息
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['药品名称', '规格', '销售价格', '药店名称'])
for element in elements:
# 获取药品名称
drug_name = element.text
if '阿莫西林' not in drug_name:
continue
# 点击药品信息,进入药品销售详情页面
element.click()
time.sleep(3)
# 获取药品销售信息
drug_info = driver.find_element_by_id('com.sankuai.meituan:id/ll_drug_info')
drug_details = drug_info.find_elements_by_class_name('android.widget.TextView')
drug_name = drug_details[0].text
drug_spec = drug_details[1].text
drug_price = drug_details[2].text
drug_store = driver.find_element_by_id('com.sankuai.meituan:id/tv_merchant_name').text
# 将药品销售信息保存到Excel文件中
ws.append([drug_name, drug_spec, drug_price, drug_store])
# 返回搜索结果页面
back_button = driver.find_element_by_class_name('android.widget.ImageButton')
back_button.click()
# 保存Excel文件
wb.save('drug_sales.xlsx')
# 关闭 driver
driver.quit()
大壮老师可以帮帮我吗?我特地买您课程解决问题。
可以远程指导下吗?我这边环境都是好的,完备的。(QQ:1981791622)
写回答
1回答
-
你好,你看的应该是老版本的课程,老版本课程使用的是appium工具对目标app进行数据抓取,新版本课程使用的是uiautomator2工具进行数据抓取,u2工具更加轻量级,两者使用差不多。
112023-02-21
相似问题