Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法通过在某些搜索框中使用散列标签来生成结果

无法通过在某些搜索框中使用散列标签来生成结果
EN

Stack Overflow用户
提问于 2019-07-13 00:33:09
回答 3查看 382关注 0票数 3

我用Python编写了一个脚本,使用Selenium登录到Instagram,然后搜索一些hashtag,比如在#NewYorkbarbers中,然后获取这个hashtag的链接。我的脚本可以成功登录,如果Not Now框出现,单击Turn on Notifications按钮,然后将该哈希标签放在搜索框中,但我无法让脚本启动该搜索来根据该哈希标签生成结果。

我已经试过了:

代码语言:javascript
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class InstagramScraper:

    login_url = 'https://www.instagram.com/accounts/login/?source=auth_switcher'

    def __init__(self,username,password):
        self.driver = webdriver.Chrome()
        self.wait = WebDriverWait(self.driver,10)
        self.login(username,password)

    def login(self,username,password):
        self.driver.get(self.login_url)
        self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'input[name="username"]'))).send_keys(username)
        self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'input[name="password"]'))).send_keys(password)
        self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'button[type="submit"]'))).click()
        try:
            self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'button.HoLwm'))).click()
        except Exception:pass

    def use_hashtag(self):
        self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'input[placeholder="Search"]'))).send_keys("#NewYorkbarbers",Keys.ENTER)

if __name__ == '__main__':
    scraper = InstagramScraper('username','password')
    scraper.use_hashtag()
  • 如何在return方法中使用login(),因为任何理想的方法都应该有返回语句?
  • 我怎样才能产生那个标签搜索的结果呢?
EN

回答 3

Stack Overflow用户

发布于 2019-07-18 02:17:58

返回语句的一般概念是返回。当您在语句中返回时,它会从调用它的位置返回。当你写return value时,它的意思是返回并接受这个值。如果没有给出返回语句,就意味着return None

票数 1
EN

Stack Overflow用户

发布于 2019-07-18 02:30:25

您正在使用Enter键启动搜索,但是如果您在浏览器中打开Instagram,您就会知道这是不可能的。

Instagram不只是在enter的单一键上启动搜索,当您第一次按enter键时,它将集中在第一个搜索建议上,这需要一些时间来加载(这并不保证是您键入的#标记,所以最好也检查文本和单击特定的#标记),当您第二次按enter键时,它将开始搜索当前聚焦的散列表。

甚至这还不够,实际上,您需要等待搜索框的建议下拉打开,然后从建议项中找到所需的#标记,然后按enter键。

基本上,这个脚本太快了,无法给搜索建议出现的时间(即使手动地点击Enter也比下拉显示快两倍,搜索也不会启动)。而且它还需要两次回车,第一次集中第一次建议,第二次开始搜索。

票数 0
EN

Stack Overflow用户

发布于 2019-07-21 16:13:31

在python中,并不是所有函数都需要返回某些内容,甚至不是以返回语句结束所有函数的约定(与其他语言(如C)不同)。事实上,根据this question的说法,最好不要有返回语句。但是,如果您确实坚持要有一个显式返回语句,那么函数末尾的简单return将是最好的选择。

至于您的另一个问题,在加载搜索建议时会出现一个新的div,因此您必须等待该div,然后发送两次enter。

下面是新的use_hashtag方法:(不好意思使用xpath而不是css选择器,但我不熟悉css,铬开发工具一直依赖于类名):

代码语言:javascript
运行
AI代码解释
复制
def use_hashtag(self):
    search_input = self.wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,'input[placeholder="Search"]')))
    search_input.send_keys("#NewYorkbarbers")
    self.wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="react-root"]/section/nav/div[2]/div/div/div[2]/div[2]/div[2]')))
    search_input.send_keys(Keys.ENTER, Keys.ENTER)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57017486

复制
相关文章

相似问题

通过sphinx搜索散列标签

10

如何在散列的散列中搜索某些键?

10

Twitter:散列标签搜索查询

34

散列标签、查询字符串和Ajaxified搜索结果

12

如何通过散列值在散列内的散列数组中进行搜索?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档