[英]Selenium bringing up wrong element by xpath even though the path is correct
[英]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.