首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过xpath查找元素,其中xpath有变量

通过xpath查找元素,其中xpath有变量
EN

Stack Overflow用户
提问于 2020-04-14 10:45:52
回答 4查看 155关注 0票数 0

我想找到来自https://www.asx300list.com/的“代码”。“代码”的xpath如下:

ABP

代码语言:javascript
复制
//*[@id="post-2"]/div/table/tbody/tr[1]/td[1]

AX1

代码语言:javascript
复制
//*[@id="post-2"]/div/table/tbody/tr[2]/td[1]

您可以看到基于'tr‘的xpath更改。

我试图创建一个代码来更改每个xpath的变量,但是我一直收到一个错误,说它不是一个有效的xpath表达式。

代码语言:javascript
复制
from selenium import webdriver
chrome_path = r"C:\Users\Harrison Pollock\Downloads\Python\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get('https://www.asx300list.com/')
for tr in range(1,300):
    codes = driver.find_elements_by_xpath('//*[@id="post 2"]/div/table/tbody/tr[{tr}]/td[1]')
    lencodes = len(codes)
    for i in range(lencodes):
        print(codes[i].text)  
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[@id="post-2"]/div/table/tbody/tr[{tr}]/td[1]' is not a valid XPath expression.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-14 10:59:53

试着在下面:

代码语言:javascript
复制
wait = WebDriverWait(driver, 20)
Codes=wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table[@class='tableizer-table sortable']//tbody//tr[*]//td[1]")))
 for code in Codes:
       print code.text

注意:请将以下导入添加到您的解决方案中

代码语言:javascript
复制
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
票数 0
EN

Stack Overflow用户

发布于 2020-04-14 10:55:43

从表中获取代码--诱导WebDriverWait()并等待visibility_of_all_elements_located()并遵循xpath

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

from selenium import webdriver
chrome_path = r"C:\Users\Harrison Pollock\Downloads\Python\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get('https://www.asx300list.com/')
elements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,"//table[@class='tableizer-table sortable']/tbody//tr/td[1]")))
for element in elements:
    print(element.text)

输出

代码语言:javascript
复制
ABP
AX1
ABC
APT
AGL
AQG
ALQ
ALU
AWC
AMA
AYS
AMC
AMP
ANN
APE
APA
ADI
APX
ARB
ALG
ARF
ALL
AHY
ASX
ALX
AUB
AIA
AD8
AMI
AZJ
AST
ASB
ANZ
AAC
API
AVN
AVH
BBN
BOQ
BAP
BPT
BGA
BGL
BEN
BHP
BIN
BKL
BSL
BLD
BXB
BVS
BRG
BKW
BUB
BWP
BWX
CTX
CDD
CVN
CAR
CWP
CNI
CIP
COF
CGF
CIA
CHC
CLW
CQR
CQE
CNU
CIM
CWY
CUV
CCL
COH
CDA
COL
CKF
CBA
CPU
COE
CTD
CGC
CCP
CMW
CWN
CSL
CSR
DCN
DTL
DXS
DHG
DMP
DOW
ECX
ELD
EHL
EML
EHE
A2M
EVN
FAR
FBU
FLT
FMG
FNP
FPH
FXL
GDI
GEM
GMA
GMG
GNC
GOR
GOZ
GPT
GUD
GWA
GXY
HLS
HPI
HSN
HT1
HUB
HVN
IAG
IAP
IEL
IFL
IFM
IFN
IGL
IGO
ILU
IMD
IMF
INA
ING
INR
IPH
IPL
IRE
IRI
ISX
ITG
IVC
JBH
JHC
JHG
JHX
JIN
JMS
KAR
KGN
LIC
LLC
LNK
LOV
LYC
MAH
MFG
MGR
MGX
MIN
MLD
MMS
MND
MNY
MP1
MPL
MQG
MSB
MTS
MVF
MYR
MYS
MYX
NAB
NAN
NCK
NCM
NCZ
NEA
NEC
NGI
NHC
NHF
NIC
NSR
NST
NUF
NWH
NWL
NWS
NXT
OFX
OGC
OML
ORA
ORE
ORG
ORI
OSH
OZL
PDL
PDN
PET
PGH
PLS
PME
PMV
PNI
PNV
PPT
PRN
PRU
PTM
QAN
QBE
QUB
RDC
REA
REG
RFF
RHC
RIO
RMD
RMS
RRL
RSG
RWC
S32
SAR
SBM
SCG
SCP
SDA
SDF
SEK
SFR
SGF
SGM
SGP
SGR
SHL
SHV
SIG
SIQ
SKC
SKI
SLC
SLR
SM1
SOL
SPK
SPL
SSM
STO
SUL
SUN
SVW
SWM
SXL
SXY
SYD
SYR
TAH
TCL
TGR
TLS
TNE
TPM
TWE
UMG
URW
VCX
VEA
VOC
VRL
VRT
VUK
VVR
WAF
WBC
WEB
WES
WGX
WHC
WOR
WOW
WPL
WPP
WSA
WTC
XRO
Z1P

Process finished with exit code 0
票数 0
EN

Stack Overflow用户

发布于 2020-04-14 10:58:04

我认为这是一个带有字符串连接的python问题。试一试

codes = driver.find_elements_by_xpath('//*[@id="post 2"]/div/table/tbody/tr[' + str(tr) + ']/td[1]')

最后的xpath仍然有{tr}在数字应该在的位置,请检查此帮助以获得字符串连接:https://www.jquery-az.com/5-ways-python-string-concatenation-6-examples/

由于tr变量是整数,所以还需要将其转换为字符串str(tr)

顺便说一下。我想您可以使用更简单的xpath //*[@id="post 2"]//tr[' + str(tr) + ']/td[1]')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61205882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档