python - Selenium 和 Instagram:计算传入消息的数量
问题描述
我目前正在学习 Python,我一直在尝试编写一个程序来访问我的 Instagram 个人资料并计算每次运行时传入/未读消息的数量。到目前为止,我可以一直访问我的收件箱,但是我不确定我应该如何从那里开始,定位元素并计算它们。尝试使用 BeautifulSoup4 和标准代码,但有些东西没有坚持。
我已经尝试通过蓝点在 HTML 中定位它们,但这并没有真正的帮助,因为它们都共享同一个 div 类。
<div class=" _41V_T Sapc9 Igw0E IwRSH eGOV_ _4EzTm " style="height: 8px; width: 8px;"></div>
new_message = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "_41V_T Sapc9 Igw0E IwRSH eGOV_ _4EzTm")))
关于我应该如何处理的任何想法?
@Insula,非常感谢您的反馈。我的代码如下,但返回Unread messages: 0
soup = BeautifulSoup(browser.page_source, features='html.parser')
new_message = soup.find_all("div", {"class":"Igw0E rBNOH YBx95 ybXk5 _4EzTm soMvl"})
counter = 0
for i in new_message:
counter +=1
print('Unread messages: ', counter)
HTML 中的类是这样的:
<div class=" Igw0E rBNOH YBx95 ybXk5 _4EzTm soMvl "><div class=" _41V_T Sapc9 Igw0E IwRSH eGOV_ _4EzTm " style="height: 8px; width: 8px;"></div></div>
编辑
尝试了许多变化,问题仍然存在。但是,在运行以下命令时,它似乎在定位某些东西,但它又是空的。
new_message = soup.find_all(lambda tag: tag.name=="div" and tag.get("class") == "_4EzTm")
if new_message is not None:
print("Found")
else:
print("Failed")
输出:
Found
Process finished with exit code 0
在这一点上,我不确定如何进行
解决方案
我发现,如果您深入研究检查元素,您会发现小蓝点的代码通知您有新消息:
如您所见,我没有收到来自底部用户的消息,所以蓝点没有出现。
然后你想找到所有的类并计算它们:
counter = 0
user = soup.find_all("div", {"class":"Igw0E rBNOH YBx95 ybXk5 _4EzTm soMvl"})
for tag in user:
counter +=1
print("Unread messages: ",counter)
类名对你来说可能不同,你总能找到我推荐的风格,因为它更准确,像这样:
soup.find_all("div",{"style" : "height: 8px; width: 8px;"})
高度和宽度可能会根据您的浏览器窗口而改变,因此在使用样式定位元素时要考虑到这一点。
编辑:如果它不起作用,您可以尝试以下操作:
取出柜台和其他东西,只需打印用户并查看它抛出的内容。就像如果有错误或其他东西并尝试调试它。
添加以下代码行,以便驱动程序等待直到加载元素:
driver.implicitly_wait(10) #seconds
确保您正在抓取的类是正确且静态的(这意味着它们在每次加载时都不会改变)
找到页面上的其他一些元素,看看是页面还是你的代码搞砸了。也许尝试只找到一个蓝点(为此取出范围循环),如下所示:
user = soup.find_all("div", {"class":"Igw0E rBNOH YBx95 ybXk5 _4EzTm soMvl"}) print(user) if user not None: print("Found") else: print("Failed")
推荐阅读
- javascript - 我如何解码 post 方法的 url?
- python-3.x - 网络抓取,从 csv 列表传递搜索值并返回 csv
- c# - C#/Unity - 需要帮助调试我的国际象棋程序 - 在同一类的另一个实例中创建类的实例时遇到问题
- python - Python - 将带有数字正则表达式的匹配方括号添加到二维数组
- r - 如何根据第一个df中的存在来合并两个数据框并替换/创建行?
- java - HTTP FAILED:java.net.SocketTimeoutException:新 Android gradle 超时
- ionic-framework - ionic 3 no 'access-control-allow-origin' 在我更新了我的 ionic cli 之后
- sql-server - SQL,针对一个“关键”间隔查找多个范围的离散重叠时间间隔并计算“最严格”的常见重叠?
- php - laravel 中的存储库模式似乎不起作用
- c# - 'MainFormLoad' 没有重载匹配委托 'System.EventHandler' (CS0123)