如何使用Selenium,Python单击课程?(Crawling Microsoft网站)



我想爬上Microsoft网站以删除我的照片。

我想单击所有照片(最多是100张照片(,然后单击"删除"按钮,然后重复4-5次。

和" itemcheck"类是要选择照片的按钮。

但是还有另一个与特定照片无关的" itemcheck"类。

两个" itemcheck"类的差异是祖先。

所以我想先查找" list-cell"类,然后在"列表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 "mypathDesktopfirefox.py", line 36, in <module>
    print(row[0].click)
IndexError: list index out of range
[Finished in 71.3s with exit code 1]

更改循环,如下所示

elements = browser.find_elements_by_xpath("//div[@class='List-cell']//*[@class='ItemTile-rowCheck']")
print('Total rows ' + str(len(elements)))
for i in range(1,len(elements)) : # iterates through all elements
    print(i)
    row = browser.find_elements_by_xpath("//div[@class='List-cell']//*[@class='ItemTile-rowCheck']")[i]
    print(row)
    print(row.click)

@supputuri

感谢您,我得到了如何使用XPath!太感谢了!顺便说一句,我也这样做的方式选择了一个日期涵盖的整个照片。但是这样,只选择了数组,[0],[2],[4] ..如果范围从1开始,则选定的奇数数组,[1],[3],[5] ..

#Before
elements = browser.find_elements_by_xpath("//span[@class='od-AllPhotosHeader-check can-select']")
print('Total rows ' + str(len(elements)))
for i in range(0,len(elements)) :
    print(i)
    row = browser.find_elements_by_xpath("//span[@class='od-AllPhotosHeader-check can-select']")[i]
    row.click()

所以我更改了这样的代码,这起作用了!我想知道什么无法使用第一个代码选择整数?

#After
elements = browser.find_elements_by_xpath("//span[@class='od-AllPhotosHeader-check can-select']")
print(elements)
for i in range(0,len(elements)) :
    print(i)
    row = elements[i]
    row.click()

我很遗憾地这样回复,但是评论太限制了,无法添加代码。

最新更新