无法通过在某个搜索框中使用 # 标签生成结果

我用 Python 编写了一个脚本,使用 Selenium 登录到 Instagram,然后搜索一些 # #NewYorkbarbers中的 # 标签,得到该标签的链接。我的脚本可以成功登录,点击Not Now,如果Turn on Notifications 出现,然后把该标签在搜索框,但我不能让我的脚本针对该标签启动搜索产生的结果。
已经这样试过了哦,还是不行:

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.wait import WebDriverWaitfrom 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()

如何在 login() 中使用 return,因为好的方法都应该在其中包含 return 语句?
我怎样才能得到标签搜索的结果?

3个回答

Return语句的一般是返回的意思。 当你在一个语句中return时,它会返回到调用它的地方。当你给ruturn赋值时,意味着返回并取这个值。 如果没有给出 return 语句,则表示return None

你正在使用 Enter 键来启动搜索,但是如果你在浏览器中打开 Instagram,你会知道即使手动操作也做不到。
Instagram 不会简单地按下回车就开始搜索,当你第一次按下回车键时,它会关注第一个搜索,这需要一点时间来加载(这并不能保证是你输入的 # 标签,所以最好也检查文本和点击特定的 # 标签) ,当你第二次按下回车键时,它会开始搜索现在关注的 # 标签。
即使这样也还不够,事实上,你需要等待搜索框的下拉菜单打开,然后从推荐的项目中找到所需的 # 标签,然后按回车键。
基本上,这个脚本太快了,没有时间给出搜索建议(甚至你可以手动按下回车键快两倍,然后下拉菜单出现,搜索就不会启动。) 而且它还需要两次点击回车,第一将集中第一个建议,第二将启动搜索。

在 python 中,并非所有函数都需要用return 语句结尾,而且让所有函数以 return 语句结尾也不是必须的(不像其他语言,如 c语言)。 事实上,最好不要用return 语句。 但是,如果您真的坚持使用 return 语句,那么函数末尾的 simple return将是最佳选择。
至于另一个问题,当搜索建议加载后会出现一个新的 div,因此您必须等待该 div,然后发送 enter 两次。
下面是新的使用 use_hashtag方法: (很抱歉使用了 xpath 而不是 css 选择器,但我不熟悉 css 和 chrome 开发工具 :

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)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问