Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用SeleniumWebDriver创建多个单击循环?_Python_Html_Selenium - Fatal编程技术网

Python 如何使用SeleniumWebDriver创建多个单击循环?

Python 如何使用SeleniumWebDriver创建多个单击循环?,python,html,selenium,Python,Html,Selenium,我试图为第一行创建一个单击循环,但是我尝试了许多方法来找到HTML代码的唯一性,但是它似乎不起作用。因为所有的CSS内容都是相同的类 这里是链接。 您不必使用类或ID。您可以在标记中使用其他属性 您可以获取属性为data sqe=“item”的所有项目,甚至data sqe=“link”: 但问题是它不会一次加载所有链接,而是在滚动页面时添加链接。因此,您必须滚动它几次,它将加载所有元素。您不能直接滚动到页面末尾,因为它可能不会加载您跳过(跳过)的项目 之后,您可以将所有URL添加到列表中。然

我试图为第一行创建一个单击循环,但是我尝试了许多方法来找到HTML代码的唯一性,但是它似乎不起作用。因为所有的CSS内容都是相同的类

这里是链接。


您不必使用类或ID。您可以在标记中使用其他属性

您可以获取属性为
data sqe=“item”
的所有项目,甚至
data sqe=“link”

但问题是它不会一次加载所有链接,而是在滚动页面时添加链接。因此,您必须滚动它几次,它将加载所有元素。您不能直接滚动到页面末尾,因为它可能不会加载您跳过(跳过)的项目

之后,您可以将所有URL添加到列表中。然后使用
driver.get()
加载页面

最好不要在循环中获取URL时单击,因为它只保留对页面上元素(WebElement)的引用,而不是URL字符串,并且在加载另一个页面时将失去对元素的访问

import selenium.webdriver
from selenium.webdriver.common.action_chains import ActionChains

import time
url = 'https://shopee.com.my/search?keyword=mattress'

driver = selenium.webdriver.Firefox()
driver.get(url)
time.sleep(1)

# Select language
driver.find_element_by_xpath('//div[@class="language-selection__list"]/button').click()
time.sleep(3)

# Scroll few times to load all items
for x in range(10):
    driver.execute_script("window.scrollBy(0,300)")
    time.sleep(0.1)

# Get all links (without clicking)

all_items = driver.find_elements_by_xpath('//a[@data-sqe="link"]')
print('len:', len(all_items))

all_urls = []

for item in all_items:
    url = item.get_attribute('href')
    all_urls.append(url)
    print(url)

# Now use links

for item in all_urls:
    driver.get(url)

所有这些都有
数据sqe=“item”
,因此您可以找到所有这些数据,然后使用
[:4]
仅获取第一行。顺便说一句:但是如果你想访问URL,你必须将URL保持为字符串。如果您将保留为
WebElements
,则在更改页面时(单击第一个链接时)会将其释放。
for x in range(10):
    driver.execute_script("window.scrollBy(0,300)")
    time.sleep(0.1)
import selenium.webdriver
from selenium.webdriver.common.action_chains import ActionChains

import time
url = 'https://shopee.com.my/search?keyword=mattress'

driver = selenium.webdriver.Firefox()
driver.get(url)
time.sleep(1)

# Select language
driver.find_element_by_xpath('//div[@class="language-selection__list"]/button').click()
time.sleep(3)

# Scroll few times to load all items
for x in range(10):
    driver.execute_script("window.scrollBy(0,300)")
    time.sleep(0.1)

# Get all links (without clicking)

all_items = driver.find_elements_by_xpath('//a[@data-sqe="link"]')
print('len:', len(all_items))

all_urls = []

for item in all_items:
    url = item.get_attribute('href')
    all_urls.append(url)
    print(url)

# Now use links

for item in all_urls:
    driver.get(url)