【发布时间】:2019-08-05 01:50:24
【问题描述】:
我想爬取微软网站来删除我的照片。
我想点击所有照片(最多 100 张照片)然后点击删除按钮并重复差不多 4-5 次。
“ItemCheck”类是选择照片的按钮。
但是还有另一个与特定照片无关的“ItemCheck”类。
两个“ItemCheck”类的区别在于祖先。
所以我想先找到“List-cell”类,然后在“List-cell”类中找到“ItemCheck”类。
我该如何解决这个问题? 我使用 pythone 和 sublime。
我尝试使用“find_elements_by_css_selector”作为代码,但“行”是空的! =>[ ]
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.by import By
EMAILFIELD = (By.ID, "i0116")
PASSWORDFIELD = (By.ID, "i0118")
NEXTBUTTON = (By.ID, "idSIButton9")
browser = webdriver.Firefox(executable_path="mypath/firefoxdriver_win64/geckodriver.exe")
browser.get('https://login.live.com')
WebDriverWait(browser, 10).until(EC.element_to_be_clickable(EMAILFIELD)).send_keys("mymail")
WebDriverWait(browser, 10).until(EC.element_to_be_clickable(NEXTBUTTON)).click()
WebDriverWait(browser, 10).until(EC.element_to_be_clickable(PASSWORDFIELD)).send_keys("mypassword")
WebDriverWait(browser, 10).until(EC.element_to_be_clickable(NEXTBUTTON)).click()
browser.get('https://onedrive.live.com/?v=photos')
browser.implicitly_wait(5)
#Click class="ItemTile-rowCheck" which the ancestor is class="List-cell"
elements = browser.find_elements_by_xpath('//div[@class="List-cell"]') #bring div elements which have class="List-cell"
print(elements)
for i in range(0,24) : #temporory
print(i)
row = elements[i].find_elements_by_css_selector('.ItemTile-rowCheck') #find .ItemTile-rowCheck among elements[i]
print(row)
print(row.click)
此代码运行结束时的结果是这样的。
[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="647f1105-2da6-47f0-870b-de097648cd21")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="442a5f3e-4301-4a80-b7f4-f5fba96a56e9")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="2654aa45-61ae-4360-995f-3d2b68eef4d8")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="ad471298-e830-4e51-8d3c-41addf085851")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="ca88ef30-6d7b-427f-9f9e-2240e803a15e")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="db1ae4c3-e80f-469d-89ee-5eea778b7913")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="0ac74651-1c1e-40b3-9ea2-2df41302ea06")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="12759c61-6c85-4d68-8dcb-ed75744ae2bb")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="a1bcd428-5f1d-44b5-bc7f-94d367c7e31f")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="e3b2e76d-d17e-4c00-a3fd-0b96f721037a")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="311d9527-4175-48eb-9447-d9dfdbc55bf8")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="6cd98ae1-6209-4fd1-a1e4-0faf744c59a1")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="f5d0a102-b9a9-4be5-9c71-58927c2d4e21")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="344d3cf5-3d68-4ef6-b0e1-f62ed4005b69")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="7369e37f-2b4b-4c73-ae1b-72a92ee590a5", element="f8777f86-d581-4697-96df-6c2b28490eed")>]
0
[]
Traceback (most recent call last):
File "mypath\Desktop\firefox.py", line 36, in <module>
print(row[0].click)
IndexError: list index out of range
[Finished in 71.3s with exit code 1]
【问题讨论】:
-
虽然您使用 Sublime Text 运行代码,但这不是 Sublime Text 问题,因为 Sublime 所做的只是告诉
python解释器运行您的代码。
标签: python selenium web-crawler