簡體   English   中英

Selenium 和 XPath。無法在頁面 (Instagram) 中找到元素,即使看起來我有正確的路徑。 彈性元素?

[英]Selenium and XPath. Can't find an element in a page (Instagram) even though it looks like I have the correct path. Flex element?

我正在 Selenium 上進行網絡抓取課程。總體目標是抓取此頁面 ( https://www.instagram.com/dataminer2060/ ) 上的照片。 我堅持的子目標是抓取帖子數量(目前為 37)。

第一個檢查元素第二個檢查元素

我的代碼如下。 一切都可以登錄 Instagram,避開彈出窗口。 我正在努力解決的問題是def(scroll_down) 我收到無法定位元素錯誤。

我懷疑這是因為這是一個 flex 元素,但我還不知道如何導航這些元素。

任何幫助將非常感激

from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options as ChromeOptions

#to stop Selenium automatically closing

options = ChromeOptions()
options.add_experimental_option("detach", True)

class App:
    def __init__(self, username='my.username', password='mypassword', target_username='dataminer2060',
                 path='/Users/MyUser/Desktop/instaPhotos'): 
        self.username = username
        self.password = password
        self.target_username = target_username
        self.path = path
        self.service = Service('/Users/MyUser/Documents/Python/chromedriver')
        self.driver = webdriver.Chrome(options=options, service=self.service)
        self.error = False
        self.main_url = 'https://www.instagram.com'
        self.driver.get(self.main_url)
        sleep(3)

        self.log_in()
        sleep(3)
        self.open_target_profile()
        sleep(3)
        self.scroll_down()

#HERE IS WHERE I'M STUCK

    def scroll_down(self):
        no_of_posts = self.driver.find_element(By.XPATH, "//span[@class='g47SY lOXF2']")
        no_of_posts = str(no_of_posts.text)
        print(no_of_posts)
        input('stop for now')

#BELOW WORKS

    def open_target_profile(self):
        search_bar = self.driver.find_element(By.XPATH, "//input[@placeholder='Search']")
        search_bar.send_keys(self.target_username)
        target_profile_url = self.main_url + "/" + self.target_username + "/"
        self.driver.get(target_profile_url)
        sleep(3)

    def log_in(self):
        cookies = self.driver.find_element(By.XPATH, "//button[contains(text(), 'Only Allow Essential Cookies')]")
        cookies.click()
        sleep(1)
        login_details = self.driver.find_element(By.XPATH, "//input[@aria-label='Phone number, username or email address']")
        login_details.send_keys('my.username')
        sleep(2)
        password = self.driver.find_element(By.XPATH, "//input[@aria-label='Password']")
        password.send_keys('mypassword')
        sleep(2)
        login_button = self.driver.find_element(By.XPATH, "//div[text()='Log In']")
        login_button.click()
        sleep(3)
        save_info = self.driver.find_element(By.XPATH, "//button[text()='Save information']")
        save_info.click()
        sleep(2)
        not_now2 = self.driver.find_element(By.XPATH, "//button[text()='Not Now']")
        not_now2.click()

if __name__ == '__main__':
    app = App()

我試過 XPATH,div 父級的那個和完整的 XPath。我希望能夠找到包含沒有文本的元素。 職位。

犯了一個錯誤。 <span class="g47SY ">37</span>我以某種方式在原始代碼的 class 字段中添加了額外的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM